在csv.reader中获取原始行?

时间:2016-10-27 18:24:15

标签: python csv

我在csv.reader周围创建一个包装器,即使它遇到格式错误的行(即具有NULL字节的行),也会让读者继续工作。它看起来像:

def error_ignoring_csv_reader(csv_reader):
    while True:
        try:
            yield next(csv_reader)
        except csv.Error, e:
            logger.warning("Got badly formed line with error [%s]" % e)

我真正想要做的是将原始有问题的行包含在已记录的警告中#34;格式错误的行[actual_raw_line]",但阅读csv'源代码,我还没有找到任何访问它的方法。是否可以访问我们在csv.reader中处理的原始未处理的当前行?

1 个答案:

答案 0 :(得分:0)

虽然我不知道直接在csv.reader中访问原始的,未处理的当前行的方法,但这些对象确实提供了csvreader.line_num属性,可以为获取当前行提供基础。

csv.reader的csvfile参数“可以是任何支持迭代器协议的对象,并且每次调用next()方法时都返回一个字符串”,因此它不必是普通文件。参考文档特别提到了一个字符串列表作为选项。

如果您可以先将文件读入列表,则可以使用line_num属性在出现错误时将其编入索引。或者您可以返回并重新读取文件中的行以查找有问题的行。

或者您可以构建一个自定义迭代器,该文件从文件中读取并记住最后一行读取。 (使用最后一种方法,您的代码将创建您的特殊迭代器并将其传递给csv.reader。在这种情况下您甚至不需要使用line_num属性。)

相关问题