使用python合并csv文件而不重复标题

使用python合并csv文件而不重复标题,python,csv,split,Python,Csv,Split,我正试着这么做 import glob interesting_files = glob.glob("/home/tcs/PYTHONMAP/test1/*.csv") header_saved = False with open('/home/tcs/PYTHONMAP/output.csv','wb') as fout: for filename in interesting_files: with open(filename) as fin:

我正试着这么做

import glob

interesting_files = glob.glob("/home/tcs/PYTHONMAP/test1/*.csv") 

header_saved = False
with open('/home/tcs/PYTHONMAP/output.csv','wb') as fout:
    for filename in interesting_files:
        with open(filename) as fin:
            header =  next(fin)
            if not header_saved:
                fout.write(header)
                header_saved = True
            for line in fin:
                fout.write(line)
得到

File "/home/tcs/.config/spyder-py3/temp.py", line 11, in <module>
    fout.write(header)

TypeError: a bytes-like object is required, not 'str'
文件“/home/tcs/.config/spyder-py3/temp.py”,第11行,在
fout.write(标题)
TypeError:需要类似字节的对象,而不是“str”
我对python了解不多,请帮忙 我还想知道如何将一个大csv拆分为多个具有相同标题的csv。

使用熊猫:

import pandas as pd

interesting_files = glob.glob("/home/tcs/PYTHONMAP/test1/*.csv") 
df = pd.concat((pd.read_csv(f, header = 0) for f in interesting_files))
df.to_csv("output.csv")
要同时消除重复行,请执行以下操作:

import pandas as pd

interesting_files = glob.glob("/home/tcs/PYTHONMAP/test1/*.csv") 
df = pd.concat((pd.read_csv(f, header = 0) for f in interesting_files))
df_deduplicated = df.drop_duplicates()
df_deduplicated.to_csv("output.csv")

这不会在创建数据帧时消除重复项,而是在创建之后。因此,通过连接所有文件来创建数据帧。然后对其进行重复数据消除。最后的数据帧可以保存到csv。

看看熊猫。通过指定
'wb'
fout
文件作为二进制文件打开。我认为如果您指定
'w'
来编写字符串,它应该可以工作。您可能还想看一看。非常感谢我使用system命令所做的工作。您能描述一下我们如何将大型csv文件拆分为小型文件,但每个拆分中都应该有标题,感谢Advanced 2d*.csv>/a2.csv。命令在没有python的情况下也能保持相同,@ShubhamChauhan它不能工作它将与repeat headeris一起工作有任何方法我也可以同时删除重复的行吗?@Rahul你是说重复的行吗?我已经更新了我的答案,包括一种删除重复行的方法,希望这有帮助!:)但是,如果数据的大小无法放入内存,该如何处理?通过这种方法,
df
的大小可能会超过机器RAM所能容纳的大小。
import glob
import csv
interesting_files = glob.glob("/home/tcs/PYTHONMAP/test1/*.csv") 

header_saved = False
with open('/home/tcs/PYTHONMAP/output.csv', 'w') as fout:
    writer = csv.writer(fout)
    for filename in interesting_files:
        with open(filename) as fin:
            header =  next(fin)
            if not header_saved:
                writer.writerows(header) # you may need to work here. The writerows require an iterable.
                header_saved = True
            writer.writerows(fin.readlines())