【问题标题】:append content of one csv file to another using python使用python将一个csv文件的内容附加到另一个文件
【发布时间】:2010-07-12 04:57:59
【问题描述】:

我有 2 个 csv 文件:

  • 输出.csv
  • output1.csv

output.csv 有 5 列标题。
output1.csv 有大约 40 列不同类型的数据。

我需要将 output1.csv 的所有内容附加到 output.csv。我该怎么做?
有人可以给我一个关于如何去做的提示吗???
我有以下代码:

reader=csv.DictReader(open("test.csv","r"))
allrows = list(reader)

keepcols = [c for c in allrows[0] if all(r[c] != '0' for r in allrows)]

print keepcols
writer=csv.DictWriter(open("output.csv","w"),fieldnames='keepcols',extrasaction='ignore')
writer.writerows(allrows)

    with open("test1.csv","r") as f:
        fields=next(f).split()
        # print(fields)
        allrows=[]
        for line in f:
            line=line.split()
            row=dict(zip(fields,line))
            allrows.append(row)
            # print(row)
        keepcols = [c for c in fields if any(row[c] != '0' for row in allrows)]
        print keepcols
        writer=csv.DictWriter(open("output1.csv","w"),fieldnames=keepcols,extrasaction='ignore')
        writer.writerows(allrows)

test.csv 生成 output.csv
test1.csv 生成 output1.csv

我正在尝试查看是否可以让两个文件在同一个文件中生成我的输出..

【问题讨论】:

    标签: python csv


    【解决方案1】:

    如果我正确理解您的问题,您想创建一个包含 41 列的 csv - output.csv 中的 1 列,然后是 output1.csv 中的 40 列。 我假设它们具有相同的行数(如果不是 - 什么是必要的行为?)

    尝试使用 csv 模块:

    import csv
    reader = csv.reader(open('output.csv', 'rb'))
    reader1 = csv.reader(open('output1.csv', 'rb'))
    writer = csv.writer(open('appended_output.csv', 'wb'))
    for row in reader:
        row1 = reader1.next()
        writer.writerow(row + row1)
    

    如果您的 csv 文件使用特殊分隔符或引号字符进行格式化,您可以为 csv.reader 和 csv.writer 对象使用可选的关键字参数。 详情见Python's csv module documentation...

    编辑:按照建议添加了“b”标志。

    【讨论】:

      【解决方案2】:

      This 最近的讨论看起来与您正在寻找的内容非常相似,只是那里的 OP 想要连接 mp3 文件。

      编辑:

      import os, sys
      target = '/path/to/target'
      src1 = '/path/to/source1.csv'
      src2 = '/path/to/source2.csv'
      tf = open(target, 'a')
      tf.write(open(src1).read())
      tf.write(open(src2).read())
      tf.close()
      

      试试这个,这应该可以工作,因为你只是想做相当于 cat src1 src2 > target 的 shell 命令

      【讨论】:

      • 但我猜 csv 文件与 mp3 文件有很大不同......所以你对我的问题有什么建议??
      【解决方案3】:

      “我需要将 output1.csv 的所有内容附加到 output.csv 中。” ... 从字面上看,这意味着在第一个文件中写入每一行,然后在第二个文件中写入每一行。这就是你想要的吗??

      标题是什么?另一个文件中的 40 列?如果是这样,那么假设您希望将标题写成一行列标题:

      import csv
      titles = [x[0] for x in csv.reader(open('titles.csv', 'rb'))]
      writer = csv.writer(open('merged.csv', 'wb'))
      writer.writerow(titles)
      for row in csv.reader(open('data.csv', 'rb')):
          writer.writerow(row)
      

      【讨论】:

      • 不,我不需要标题成为列标题......我需要它们保持原位......我只是想将其他 40 列附加到 output.csv,根据你的说法是“标题.csv”
      【解决方案4】:

      如果你想传递一个条件,你也可以使用阅读器的生成器:

      import csv
      def read_generator(filepath:str):
         with open(filepath, 'rb'):
           reader = csv.reader(f)
           for row in reader:
             if row[0] == condition:
               yield row
      
      

      然后用:

      writer = csv.writer(open("process.csv", "rb"))
      write.writerow(read_generator(file_to_read.csv))
      

      【讨论】:

        猜你喜欢
        • 2020-11-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-03
        • 2020-02-21
        • 1970-01-01
        • 2017-07-08
        • 2013-11-09
        相关资源
        最近更新 更多