我正在从文本文件中读取管道分隔的数据。有一些解析问题,我在处理pd.read_csv(error_bad_lines=False)
时也遇到了同样的问题
files = [f for f in filepath for f in os.listdir(filepath)]
df_f=[]
for i in files:
df = df = pd.read_csv(i,usecols=col_lst,sep='|',engine='python',encoding='iso-8859-1',error_bad_lines=False)
df_f.append(df)
上面的方法是删除由于|
解析问题而导致的坏行并继续。
目标:我可以获得上面示例中错误行的警告消息列表并创建相同的列表吗。
例如。
df_f =[]
bad_line =[]
for i in files:
df = df = pd.read_csv(i,usecols=col_lst,sep='|',engine='python',encoding='iso-8859-1',error_bad_lines=False)
#Pseudo Code Below. Need assistance in building it correctly
if bad_lines:
bad_line.append(bad_lines)
df_f.append(df)
换句话说,我如何将警告消息附加到bad_line
列表中。
对此有任何想法都将不胜感激。
在将错误重定向到日志文件时执行同样的操作。基本上,我用pathlib
替换了os
,因为它更可读。我把warning_bad_lines
变成了真的,就这样。
from pathlib import Path
import contextlib
import pandas as pd
# variables replace with real ones
CSVS_DIR = './data'
LOG_DIR = './logs'
COL_LIST = ['your_list', '...']
# create log dir if not exist
Path(LOG_DIR).mkdir(parents=True, exist_ok=True)
# direct warning to log.txt
with open(f'{LOG_DIR}log.txt', 'w') as f:
with contextlib.redirect_stderr(f):
dfs_list = [pd.read_csv(csv_file, usecols=COL_LIST,sep='|',engine='python',encoding='iso-8859-1',error_bad_lines=False, warn_bad_lines=True, ) for csv_file in Path(CSVS_DIR).glob('*.csv')]
df_master = pd.concat(dfs_list)
如果我们不想要日志文件,我们可以使用warning
库
import warnings
from pathlib import Path
import pandas as pd
# variables replace with real ones
CSVS_DIR = './data'
COL_LIST = ['your_list', '...']
# direct warning to variable:
with warnings.catch_warnings(record=True) as w:
dfs_list = [pd.read_csv(csv_file, usecols=COL_LIST,sep='|',engine='python',encoding='iso-8859-1',error_bad_lines=False, warn_bad_lines=True, ) for csv_file in Path(CSVS_DIR).glob('*.csv')]
df_master = pd.concat(dfs_list)
df_bad_lines_list = [str(bad.message) for bad in w]