STDIN的CSV阅读器中的“_csv.Error:line contains NULL byte”

时间:2014-11-24 09:52:41

标签: python csv stdin

CSV 文件中读取时,有许多关于此错误的StackOverflow问题。从 STDIN 阅读时出现问题。

[Most SO solutions talk about tweaking the open() command which works for opening CSV files - not for reading them through STDIN]. My problem is with reading through STDIN. So please don't mark this as a duplicate.

我的python代码是:

import sys , csv
def main(argv): 
    reader = csv.reader(sys.stdin, delimiter=',')
    for line in reader:
        print line

,返回的错误是:

Traceback (most recent call last):
File "mapper.py", line 19, in <module>
    main(sys.argv) 
File "mapper.py", line 4, in main
    for line in reader:
_csv.Error: line contains NULL byte

只需忽略for循环中出现NULL字节的行(如果可能的话)就足够了。

1 个答案:

答案 0 :(得分:1)

我通过处理CSV异常

解决了这个问题
import sys , csv    
def main(argv): 
    reader      = csv.reader(sys.stdin, delimiter=',')
    lineCount   = 0
    errorCount  = 0
    while True:
        # keep iterating indefinitely until exception is raised for end of the reader (an iterator)
        try:
            lineCount += 1
            line = next(reader)
            print "%d - %s" % (lineCount , line)
        except csv.Error: 
            # this exception is raised when a malformed CSV is encountered... ignore it and continue
            errorCount += 1
            continue
        except StopIteration: 
            # this exception is raised when next() reaches the end of the iterator
            lineCount -= 1
            break
    print "total line: %d" % lineCount
    print "total error: %d" % errorCount