reading csv file without for

前端 未结 8 1689
孤街浪徒
孤街浪徒 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:03

    not really sure what you mean, but you can always check for existence with if

    >>> reader = csv.reader("file")
    >>> for r  in reader:
    ...   if r: print r
    ...
    

    if this is not what you want, you should describe your problem more clearly by showing examples of things that doesn't work for you, including sample file format and desired output you want.

    0 讨论(0)
  • 2020-12-10 05:05

    If your problem is specific to the last line being empty, you can use numpy.genfromtxt (or the old matplotlib.mlab.csv2rec)

    $: cat >csv_file.txt
    foo,bar,baz
    yes,no,0
    x,y,z
    
    
    
    $:
    $: ipython
    >>> from numpy import genfromtxt
    >>> genfromtxt("csv_file.txt", dtype=None, delimiter=',')
    array([['foo', 'bar', 'baz'],
           ['yes', 'no', '0'],
           ['x', 'y', 'z']], 
          dtype='|S3')
    
    0 讨论(0)
  • 2020-12-10 05:06

    The Django community has addressed Python CSV import issues, so it might be worth searching for CSV import there, or posting a question. Also, you could edit the offending line directly in the CSV file before trying the import.

    0 讨论(0)
  • 2020-12-10 05:06

    Process the initial csv file and replace the Nul '\0' with blank, and then you can read it. The actual code looks like this:

    data_initial = open(csv_file, "rU")
    reader = csv.reader((line.replace('\0','') for line in data_initial))
    

    It works for me.

    And the original answer is here:csv-contain null byte

    0 讨论(0)
  • 2020-12-10 05:07

    You could try cleaning the file as you read it:

    def nonull(stream):
        for line in stream:
            yield line.replace('\x00', '')
    
    f = open(filename)
    reader = csv.reader(nonull(f))
    

    Assuming, of course, that simply ignoring NULL characters will work for you!

    0 讨论(0)
  • 2020-12-10 05:09

    Maybe you could catch the exception raised by the CSV reader. Something like this:

    filename = "my.csv"
    reader = csv.reader(open(filename))
    try:
        for row in reader:
            print 'Row read with success!', row
    except csv.Error, e:
        sys.exit('file %s, line %d: %s' % (filename, reader.line_num, e))
    

    Or you could use next():

    while True:
        try: 
            print reader.next()
        except csv.Error:
            print "Error"
        except StopIteration:
            print "Iteration End"
            break
    
    0 讨论(0)
提交回复
热议问题