У меня есть каталог, который содержит большое количество файлов CSV (более 1000). Я использую библиотеку Python Pandas для подсчета количества столбцов в каждом файле CSV.
Но проблема в том, что разделитель, используемый в некоторых файлах CSV, не только "," but "|" and ";"
Как решить эту проблему:
import pandas as pd
import csv
import os
from collections import OrderedDict
path="C:\\Users\\Username\\Documents\\Sample_Data_August10\\outbound"
files=os.listdir(path)
col_count_dict=OrderedDict()
for file in files:
df=pd.read_csv(os.path.join(path,file),error_bad_lines=False,sep=",|;|\|",engine='python')
col_count_dict[file]=len(df.columns)
Я храню его как словарь.
Я получаю сообщение об ошибке:
Error could possibly be due to quotes being ignored when a multi-char delimiter is used
Я использовал sep=None
, но это не сработало.
Редактировать :
Один из CSV похож на это :
Number|CommentText|CreationDate|Detail|EventDate|ProfileLocale_ISO|Event_Number|Message_Number|ProfileInformation_Number|Substitute_UserNo|User_UserNo
Второй как:
Number,Description
Я не могу раскрыть данные. Я только что дал имя столбца, так как данные чувствительны.
Обновление
После небольшой подстройки и использования статуса печати, чтобы выяснить, используя код andrey-portnoy, я узнал, что csv sniffer идентифицирует разделитель для "|" как «е», поэтому, используя оператор if, я изменил его обратно на «|». Теперь он дает мне правильный вывод.
Также вместо read()
я использовал readline()
. в следующей строке кода в ответе Андрея: dialect = csv.Sniffer().sniff(csvfile.read(1024))
Но проблема остается нерешенной. Я смог выяснить это после большого количества проверок, но каждый раз я могу ошибаться, и это может привести к ошибке.
Любая помощь будет ждать.