Re: Error in reading and writing CSV format file in python

Discussion in 'Python' started by Steven D'Aprano, Feb 11, 2013.

  1. inshu chauhan wrote:

    > In the programme below I am trying to read two csv format files and
    > process them and write a new file with some of theirs data.
    >
    > import csv
    > f1_reader = csv.reader(open(r"Z:\Weka
    > work\Feature_Vectors_Fullset_00.arff"))
    > f2_reader = csv.reader(open(r"Z:\Weka
    > work\Feature_Vectors_Fullset_00_noxy+class.arff"))
    > nf = open(r"Z:\Weka work\classified_image00_withoutxy.arff", "w")
    >
    > while True:
    > l1 = f1_reader.next()
    > while len(l1) != 12:
    > l1 = f1_reader.next()
    > l2 = f2_reader.next()
    > while len(l2) != 11:
    > l2 = f2_reader.next()
    >
    > ix = l1[0].strip()
    > iy = l1[1].strip()
    > classification = l2[8].strip()
    >
    > print >> nf, ix, iy, classification
    >
    > nf.close()
    >
    > This programme is giving me this error now :
    >
    > Traceback (most recent call last):
    > File "Z:\Weka work\final_image_classificationwithoutxy.py", line 16, in
    > <module>
    > l2 = f2_reader.next()
    > StopIteration
    >
    >
    > what could be a possible reason to StopIteration ???


    next() raises StopIteration when there is nothing else to return.


    py> it = iter([1, 2, 3])
    py> it.next()
    1
    py> it.next()
    2
    py> it.next()
    3
    py> it.next()
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    StopIteration


    You have reached the end of the file and there is nothing else for the CSV
    reader to return, so it raises StopIteration.



    --
    Steven
     
    Steven D'Aprano, Feb 11, 2013
    #1
    1. Advertising

  2. Steven D'Aprano

    MRAB Guest

    On 2013-02-11 12:44, inshu chauhan wrote:
    >
    > On Mon, Feb 11, 2013 at 1:26 PM, Steven D'Aprano
    > <
    > <mailto:>> wrote:
    >
    > inshu chauhan wrote:
    >
    > > In the programme below I am trying to read two csv format files and
    > > process them and write a new file with some of theirs data.
    > >
    > > import csv
    > > f1_reader = csv.reader(open(r"Z:\Weka
    > > work\Feature_Vectors_Fullset_00.arff"))
    > > f2_reader = csv.reader(open(r"Z:\Weka
    > > work\Feature_Vectors_Fullset_00_noxy+class.arff"))
    > > nf = open(r"Z:\Weka work\classified_image00_withoutxy.arff", "w")
    > >
    > > while True:
    > > l1 = f1_reader.next()
    > > while len(l1) != 12:
    > > l1 = f1_reader.next()
    > > l2 = f2_reader.next()
    > > while len(l2) != 11:
    > > l2 = f2_reader.next()
    > >
    > > ix = l1[0].strip()
    > > iy = l1[1].strip()
    > > classification = l2[8].strip()
    > >
    > > print >> nf, ix, iy, classification
    > >
    > > nf.close()
    > >
    > > This programme is giving me this error now :
    > >
    > > Traceback (most recent call last):
    > > File "Z:\Weka work\final_image_classificationwithoutxy.py",

    > line 16, in
    > > <module>
    > > l2 = f2_reader.next()
    > > StopIteration
    > >
    > >
    > > what could be a possible reason to StopIteration ???

    >
    > next() raises StopIteration when there is nothing else to return.
    >
    >
    > py> it = iter([1, 2, 3])
    > py> it.next()
    > 1
    > py> it.next()
    > 2
    > py> it.next()
    > 3
    > py> it.next()
    > Traceback (most recent call last):
    > File "<stdin>", line 1, in <module>
    > StopIteration
    >
    >
    > You have reached the end of the file and there is nothing else for
    > the CSV
    > reader to return, so it raises StopIteration.
    >
    >
    >
    > But why does it has nothing to return so early before traversing the
    > whole file ? Is there any way it can be corrected ? And also the
    > programme isn't writing anything to the file ?
    >

    Try adding some logging so that you can see what it's doing. A simple way
    would be something like:

    log_file = open(r"Z:\Weka work\log.txt", "w")

    ....

    l1 = f1_reader.next()
    print >> log_file, "Read from f1:", l1
    print >> log_file, "Length is", len(l1)
    while len(l1) != 12:
    l1 = f1_reader.next()
    print >> log_file, "Read from f1:", l1
    print >> log_file, "Length is", len(l1)

    and so on.
     
    MRAB, Feb 11, 2013
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Replies:
    6
    Views:
    474
    Thomas Ganss
    Jan 15, 2006
  2. Tintin92
    Replies:
    1
    Views:
    1,753
    Andrew Thompson
    Feb 14, 2007
  3. MRAB
    Replies:
    0
    Views:
    154
  4. Dave Angel
    Replies:
    0
    Views:
    154
    Dave Angel
    Feb 11, 2013
  5. Replies:
    3
    Views:
    89
    Jason Friedman
    Apr 2, 2014
Loading...

Share This Page