【问题标题】:How to loop different csv and merge them?如何循环不同的csv并合并它们?
【发布时间】:2020-05-06 16:23:59
【问题描述】:

我需要从 url 中获取一系列 csv,它们具有不同的命名,但扩展名为 .csv 和完全相同的格式。

然后转成json。

以下是我使用的,但如何循环任何.csv?

也曾经下载它们如何合并它们?所以假设我们有不同的日期,我们应该期待这样的合并:

 {
    "date": 2/4/20,
    "state": "AK",...
},
 {
    "date": 3/4/20,
    "state": "AK"...

这是我用于单个 csv 的 php

header('Content-Type: application/json');

if (($handle = fopen("example.com/NAME.csv", "r")) !== FALSE) {
    $csvs = [];
    while(! feof($handle)) {
        $csvs[] = fgetcsv($handle);
    }
    $datas = [];
    $column_names = [];
    foreach ($csvs[0] as $single_csv) {
        $column_names[] = $single_csv;
    }
    foreach ($csvs as $key => $csv) {
        if ($key === 0) {
            continue;
        }
        foreach ($column_names as $column_key => $column_name) {
            $datas[$key-1][$column_name] = $csv[$column_key];
        }
    }
    $json = json_encode($datas, JSON_PRETTY_PRINT);
    fclose($handle);
    print_r($json);
}

如果我们有怎么办

example.com/NAME.csv

example.com/NAME2.csv

example.com/NAME3.csv

更新

This is the series of csv and its data

【问题讨论】:

标签: php json csv


【解决方案1】:

因为没有办法(据我所知)scrape 一个站点并找到所有具有相同扩展名的文件(正如 cmets 所说,因为我找不到如何使用 php) ,我最终创建了一个名称数组(在我的例子中是日期)然后循环它,然后输出将是一个合并的 json:

$arr = array("04-12-2020",
    "04-13-2020",
    "04-14-2020",
    "04-15-2020",
    "04-16-2020",
    "04-17-2020",
    "04-18-2020",
    "04-19-2020",
    "04-20-2020",
    "04-21-2020",
    "04-22-2020",
    "04-23-2020",
    "04-24-2020",
    "04-25-2020",
    "04-26-2020",
    "04-27-2020",
    "04-28-2020",
    "04-29-2020",
    "04-30-2020",
    "05-01-2020",
    "05-02-2020",
    "05-03-2020",
    "05-04-2020",
    "05-05-2020"
);

foreach($arr as $date) {
    $url = $url.$date.".csv";..
    // here the rest of the code as per the question

不确定这是否是最好的方法但有效。

结果是一个包含所有日期和合并数据作为单个 obj 的大型 json

【讨论】:

  • 只是出于好奇:这与您的问题有何关联?字符串列表如何帮助合并 CSV 文件?
  • @NicoHaase 在下载时附加转换为 json 的 csv
  • @NicoHaase 为什么还要列出字符串?这是一个文件名列表,我查看并附加扩展名,然后循环运行有关问题的代码。为什么你投票支持我的答案,反对票归零?
  • @NicoHaase 嗨,你问过这个用户他尝试了什么?你要投反对票吗?只是出于好奇。 stackoverflow.com/questions/61648962/…
  • 不,我为什么要这样做?
猜你喜欢
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 2022-08-22
  • 2012-07-25
  • 1970-01-01
  • 2020-12-21
  • 2021-11-21
相关资源
最近更新 更多