首页 > 解决方案 > 用分隔符“;”合并目录中的 csv 文件 具有相同的标题并删除重复项

问题描述

我想在一个目录中合并几个 csv 文件(分隔符“;”)并将它们与另一个“;”一起输出到单个 csv 文件中 分隔符或带有“,”。所有 csv 文件都具有相同数量的标头(标头必须保留),并且在所有 csv 文件中它们的名称相同。但他们的内容可能有我想要删除的重复项。

这些文件的大小最大为 20 MB。

文件以相同的名称开头,但结尾不同(其中 * 替换它们)

import csv
import glob
import pandas


stock_files = sorted(glob(r'C:\Users\urale\Desktop\logs\pc_dblatmonstat_*_*.log'))
print(stock_files)


files = [stock_files]
final_headers = [
        'Start Time', 
        'epoch', 
        'Host Name', 
        'Db Alias', 
        'Database', 
        'Db Host', 
        'Db Host IP',
        'IP Port',
        'Latency (us)'
]

merged_rows = set()
for f in files:
    with open(f, 'rb') as csv_in:
        csvreader = csv.reader(csv_in, delimiter=';')
    headers = dict((h, i) for i, h in enumerate(csvreader.next()))
for row in csvreader:
        merged_rows.add(tuple(row[headers[x]] for x in final_headers))
with open('output.csv', 'wb') as csv_out:
    csvwriter = csv.writer(csv_out, delimiter=',')
    csvwriter.writerows(merged_rows)

但我收到一个错误

 Line6: Exception has occurred: TypeError
'module' object is not callable

我能否请教一下我的代码是否反映了我的请求以及为什么会出现错误?

标签: pythonpandascsvmerge

解决方案


这是我在黑暗中拍摄;试一试,让我知道它是否有效

from glob import glob
import pandas


stock_files = sorted(glob(r'C:\Users\urale\Desktop\logs\pc_dblatmonstat_*_*.log'))

final_headers = [
        'Start Time', 
        'epoch', 
        'Host Name', 
        'Db Alias', 
        'Database', 
        'Db Host', 
        'Db Host IP',
        'IP Port',
        'Latency (us)'
]

#read in files via list comprehension
content = [pd.read_csv(f,usecols = final_headers, sep='[;,]',engine='python') 
           for f in stock_files]


#combine files into one dataframe

combo = pd.concat(content,ignore_index = True)

#drop duplicates
combo = combo.drop_duplicates()

#write to csv:

combo.to_csv('new_file_name', index = False)

推荐阅读