reading csv file without for

前端 未结 8 1690
孤街浪徒
孤街浪徒 2020-12-10 04:28

I need to read a CSV file in python.

Since for last row I receive a \'NULL byte\' error I would like to avoid using for keyword but the while.

Do you know ho

相关标签:
8条回答
  • 2020-12-10 05:11

    I don't have an answer, but I can confirm the problem, and that most answers posted don't work. You cannot catch this exception. You cannot test for if line. Maybe you could check for the NULL byte directly, but I'm not swift enough to do that... If it is always on the last line, you could of course skip that.

    import csv
    FH = open('data.csv','wb')
    line1 = [97,44,98,44,99,10]
    line2 = [100,44,101,44,102,10]
    for n in line1 + line2:
        FH.write(chr(n))
    FH.write(chr(0))
    FH.close()
    FH = open('data.csv')
    reader = csv.reader(FH)
    for line in reader:
        if '\0' in line:  continue
        if not line:  continue
        print line
    
    $ python script.py 
    ['a', 'b', 'c']
    ['d', 'e', 'f']
    Traceback (most recent call last):
      File "script.py", line 11, in <module>
        for line in reader:
    _csv.Error: line contains NULL byte
    
    0 讨论(0)
  • 2020-12-10 05:22

    You need (always) to say EXACTLY what is the error message that you got. Please edit your question.

    Probably this:

    >>> import csv; csv.reader("\x00").next()
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    _csv.Error: line contains NULL byte
    >>>
    

    The csv module is not 8-bit clean; see the docs: """Also, there are currently some issues regarding ASCII NUL characters."""

    The error message is itself in error: it should be "NUL", not "NULL" :-(

    If the last line in the file is empty, you won't get an exception, you'll merely get row == [].

    Assuming the problem is one or more NULs in your file(s), you'll need to (1) speak earnestly to the creator(s) of your file(s) (2) failing that, read the whole file in (mode="rb"), strip out the NUL(s), and feed fixed_text.splitlines() to the csv reader.

    0 讨论(0)
提交回复
热议问题