0

我是 Python 新手,正在尝试获取大约 30 个 csv 文件,所有文件都具有相同的标题,但每个文件中的数据不同,并合并为一个。现在我假装我只有两个文件要接收,一个包含关于 ID 号 1,2 和 3 的信息,另一个包含关于 4,5 和 6 的信息到目前为止,我已经设法接收并使用这些文件dictreader 创建一堆字典,具有相同的键,但我不知道如何获取与每个键对应的值并将它们与所有数据一起加入一个大文件中。

这是到目前为止我已经走了多远:)

for filename in os.listdir(os.getcwd()):
  root, ext = os.path.splitext(filename)
  if root.startswith('file1') and ext == '.csv':
      upload1 = filename
  if root.startswith('file2') and ext == '.csv':
      upload2 = filename

file_upload1 = open(upload1, 'rU')
data_upload1 = csv.DictReader(file_upload1)

for row in data_upload1:
  print row

上传 2 也是如此。然后我得到这样的输出;

{'ID': '1', 'name': 'bert', 'age': '30'}
{'ID': '2', 'name': 'ernie', 'age': '40'}
{'ID': '3', 'name': 'pinky', 'age': '50'}
{'ID': '4', 'name': 'perky', 'age': '60'}
etc

我想做的是一个 csv 文件,其中一列用于 ID 1、2、3、4、5、6,然后是每个对应名称和每个对应年龄等的列。

有人可以建议我如何实现这一目标吗?对不起菜鸟问题。

4

1 回答 1

0

当您调用 csv.DictReader() 时,您将获得一个 dicts 生成器。假设我们有 2 个文件:“f1.csv”和“f2.csv”,每个文件都包含多条记录。


    import csv

    fp1, fp2 = open("f1.csv"), open("f2.csv")
    ld1, ld2 = csv.DictReader(fp1), csv.DictReader(fp2) #ld1 and ld2 are *generators*

    res = []  #our result will be stored here(LIST of dicts)
    ds = [ld1, ld2]    #list of generators

然后,迭代 ds,同时将每个 dict 中的每个 kv 对添加到 res dict,如下所示:

for d in ds: #each d is a generator
    for e in d: #each e is a dict
        res.append(e)

这个 res 现在是一个列表,其中包含来自两个来源的 dicts。只需遍历它并编写它们。

请注意,您可以使代码更加健壮/高效,但首先要了解方法:)

问候,

亚提萨加德

于 2011-10-07T23:39:29.533 回答