如何识别Python中存在解析错误的文件名?

时间:2020-02-12 17:51:21

标签: python

我有100多个csv文件,正在尝试将它们组合为一个文件,但是说“ x.csv”的文件的“ y”行是错误的行。这导致ParseError:在合并数据时将数据标记为令牌时出错。是否有一个命令来标识文件名和坏行的行,而无需我检查文件来确定哪个csv和哪一行是坏的?

编辑:以下是我现在拥有的代码,我收到一个NameError:名称'f'未定义

import pandas as pd
from pandas.io.parsers import ParserError
import os
folder_path=  'input_folder'
txt_files = os.listdir(folder_path)

try:
    combined_csv = pd.concat( [ pd.read_csv(f, sep = '|', warn_bad_lines=True) for f in txt_files] )
except ParserError:
    print("Parsing error for:", f)   

2 个答案:

答案 0 :(得分:3)

您可以尝试使用以下tryexcept块来捕获文件:

try:
    #your code to open files and parse their contents
    #...
    #...
except ParseError:
    print("Parsing error for: ", filename)

这将打印出有问题的文件。

编辑

对于您的特定示例,我将遵循以下原则:

df_list = []

for f in txt_files:
    try:
        df = pd.read_csv(f, sep = '|', warn_bad_lines=True)
        df_list.append(df)
    except ParserError:
        print("Parsing error for:", f)  

combined_csv = pd.concat(df_list)

答案 1 :(得分:1)

这取决于您解析csvs的方式,但是基于该错误,我假设您正在使用pandas.read_csv(),并且您还想读取文件的可用部分,而不是继续前进到下一个文件。如果是这样,请使用以下命令:

df = pd.read_csv(filename, error_bad_lines=False, warn_bad_lines=True)

然后查看the documentation,以了解其他选择。这将传达完整的错误及其在文件中的位置。至于标识文件本身,您可以重定向stdout并将文件名添加到警告中,或者仅在尝试读取文件之前输出文件名。