python - 用分隔符“;”合并目录中的 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
我能否请教一下我的代码是否反映了我的请求以及为什么会出现错误?
解决方案
这是我在黑暗中拍摄;试一试,让我知道它是否有效
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)
推荐阅读
- java - java spring项目仅在第一次运行时显示错误,再次运行后运行正常。这是为什么?
- python - Python Seaborn 绘制空白直方图
- git - 我们如何从已经安装了 git 的 Google Cloud Shell 连接到 git 帐户?
- python - 从 x,y 数据集计算曲线下面积,在 python 中甚至没有 x 步
- javascript - Firebase set user from auth to firestore
- javascript - TypeORM 查询今天的所有记录
- php - RegExp 匹配组前面没有字母数字 (\w) 忽略空格
- vim - Vimscript 的构建工具是否存在?
- python - 如何处理 PyTorch 自定义数据集类中的 None?
- javascript - 使用状态更新 Formik 初始值之一会重置所有其他值