合并csv文件时的额外行

时间:2014-05-27 08:13:37

标签: python csv

我想创建一个能够合并两个csv文件(相同数量的列)的函数。这是我的功能

def Gather(fullpathin,fullpathout):
    fin=open(fullpathin,'rb')
    finr=csv.reader(fin)
    fout=open(fullpathout,'ab')
    foutw=csv.writer(fout)
    for row in finr:
        foutw.writerow(row)
    fin.close()
    fout.close()

问题:当我打开最终文件时,我要合并的两个行块之间有一个空行。如何直接附加到第二个文档的下一行? 提前谢谢!

编辑:实际上我的文件中没有空行。仅举例:

f1=open('Book1.csv','wb')
f1w=csv.writer(f1)
f1w.writerow(['bonjour','hello','guten tag'])

f2=open('Book2.csv','wb')
f2w=csv.writer(f2)
f2w.writerow(['au revoir','good bye','auf widersehen'])

f1.close()
f2.close()

然后,当我应用我的功能时:

Gather('Book1.csv','Book2.csv') # I add the condition 'if any(row):' as mentionned

我现在有三排:['au revoir','再见','auf widersehen'],[]和['bonjour','hello','guten tag']。

2 个答案:

答案 0 :(得分:0)

两个提示:

  • 测试,如果您的row有内容并且没有将其写入文件,如果为空。这样可以防止空行。
  • 无需以二进制模式打开文件,请考虑使用文本一。

答案 1 :(得分:0)

  1. 如果没有必要,请不要关闭文件,以加快速度; 而不是传入fullpathout,传递foutw

  2. 您可以跳过空行。由于row是一个列表,因此可以使用any轻松检查行上的内容。

  3. 因此我们得到:

    def gather(fullpathin, foutw):
        fin = open(fullpathin, 'rb')
        finr = csv.reader(fin)
    
        for row in finr:
            if any(row): # there must be text in at least 1 of the cells
                foutw.writerow(row)
    
        fin.close()