объединить CSV-файлы в каталог с разделителем ";" с одинаковыми заголовками и удаляйте дубликаты - PullRequest
0 голосов
/ 13 апреля 2020

Я хотел бы объединить несколько файлов CSV (разделитель ";") в каталоге и вывести их в один файл CSV с любым другим ";" с разделителем или с ",". Все CSV-файлы имеют одинаковое количество заголовков (заголовки должны оставаться), и они называются одинаково во всех CSV-файлах. Но их содержимое может содержать дубликаты, которые я хочу удалить.

Файлы могут иметь размер до 20 МБ.

Файлы начинаются с одинакового имени, но различаются в конце (в * который заменяет их

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

Могу ли я получить совет, отражает ли мой код мой запрос и почему я получить ошибку?

1 Ответ

1 голос
/ 13 апреля 2020

это я стреляю в темноте; имейте go на это и позвольте мне знать, если это работает

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)
...