【问题标题】:merge csv files in a directory with delimeter ";" with the same headers and remove duplicates使用分隔符“;”将目录中的 csv 文件合并具有相同的标题并删除重复项
【发布时间】:2020-07-25 11:36:11
【问题描述】:

我想将几个 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

请问我的代码是否反映了我的请求以及为什么会出错?

【问题讨论】:

  • 熊猫读取 csv 会有所帮助;但是,有关您的数据的更多信息。哪些列/列有您要删除的重复项?你知道那些专栏吗?
  • 将第二行改为from glob import glob。但这不会是最后一个例外......
  • @sammywemmy 我认为每个列出的列中的相同条目可能会出现不止一次。我必须将合并后的 csv 导入到 SQL 表中,这就是我要消除冗余条目的原因。
  • @LydiavanDyke 谢谢。更近了一步。现在我收到另一个错误:第 25 行:预期的 str、字节或 os.PathLike 对象,而不是列表

标签: python pandas csv merge


【解决方案1】:

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

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)

【讨论】:

  • 惊人的镜头。更改以下内容后,它就像一个魅力! import pandasimport pandas as pd sep=[;,]sep=[;] combo.to_csv('new_file_name', index = False)combo.to_csv(r'C:\Users\urale\Desktop\logs\output.csv', index = False)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 2013-04-15
  • 2021-06-15
相关资源
最近更新 更多