【问题标题】:Merge information from two files into one CSV file将两个文件中的信息合并到一个 CSV 文件中
【发布时间】:2022-10-14 06:30:34
【问题描述】:

例如,第一个文件包含用冒号分隔的名称和日期:

john:01.01.2001
mary:06.03.2016

然后第二个文件包含名称和城市:

john:london
mary:new york

我需要按名称将它们顶部合并到 csv 文件中,如下所示:

name,town,date
john,london,01.01.2001
mary,new york,06.03.2016 

此外,如果缺少有关人员的信息,则在输出文件中应为“-”:

name,town,date
john,-,01.01.2001
mary,new york,-

【问题讨论】:

  • 第一步是读入这两个文件——你做到了吗?如果是这样,请包括该代码。
  • 我已经有一个读取 csv 文件的代码。现在我可以这样使用它:dates = read_csv_file("dates.txt") towns = read_csv_file("towns.txt")
  • 您能否在您的问题中包含该函数的代码,或者指出您从运行该代码中获得的 datestowns 的值? (列表列表?字典列表?)
  • 接下来,您可以将它们转换为字典,将名称作为键,其中的值是一个列表,例如[name, '-', '-']。现在,您可以遍历这两个列表,将数据添加到相应的列。现在您所要做的就是将dct.values() 复制到您的CSV 中。
  • 我得到列表列表

标签: python csv file read.csv


【解决方案1】:

一个粗略的草稿。以后有机会我会清理一些。

cat name_date.csv                                                                                                                                                                                                       
john:01.01.2001
mary:06.03.2016
sue:

cat name_city.csv                                                                                                                                                                                                       
john:london
mary:new york
bob:

import csv

with open("name_date.csv") as dt_csv:
    new_dict = {}
    dt_dictR = csv.DictReader(dt_csv, fieldnames=["name", "date"],  delimiter=':')
    for row in dt_dictR:
        if not row["date"]:
            row["date"] = '-'
        new_dict.update({row["name"]: {"date": row["date"]}})
    with open("name_city.csv") as city_csv:
        dt_dictC = csv.DictReader(city_csv, fieldnames=["name", "city"],  delimiter=':')
        print(new_dict)
        for row in dt_dictC:
            if not row["city"]: 
                row["city"] = '-' 
            if new_dict.get(row["name"]):
                new_dict[row["name"]].update({"city": row["city"]})
            else:
                new_dict.update({row["name"]: {"date": '-', "city": row["city"]}})
    with open("merged_csv", "w", newline='') as out_file:
        csv_w = csv.writer(out_file)
        csv_w.writerow(["name","town","date"])
        for item in new_dict:
            if not new_dict[item].get("city"):
                new_dict[item]["city"] = '-'
            csv_w.writerow([item, new_dict[item]["city"], new_dict[item]["date"]])

cat merged_csv                                                                                                                                                                                                          
name,town,date
john,london,01.01.2001
mary,new york,06.03.2016
sue,-,-
bob,-,-

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多