Reading several lines in a .csv file
<p>I want to read several lines of an CSV file. I am opening a list and append the one row to the list. Then I try to print the list. But the list is empty. The CSV file looks as following:</p>

<pre><code>`hallo;das;ist;ein;test;der;hoffentlich;funktioniert;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert1;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert2;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert3;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert4;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert5;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert6;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert7;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert8;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert9;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert10;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert11;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert12;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert13;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert14;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert15;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert16;fingerscrossed;
hallo;das;ist;ein;test;der;hoffentlich;funktioniert17;fingerscrossed;
`
</code></pre>

<p>This is my Code:</p>

<pre><code>import csv
spamreader = csv.reader(open('test.csv'), delimiter = ';')

verbraeuche_ab_reset = []


def berechne_gemittelten_verbrauch():
    anzahl_zeilen = sum(1 for row in spamreader)
    for row in spamreader:
        if spamreader.line_num &gt; 9 and spamreader.line_num &lt; anzahl_zeilen:
            verbrauch_ab_reset = row[7]

            verbraeuche_ab_reset.append(verbrauch_ab_reset)

    print(verbraeuche_ab_reset)
    print(anzahl_zeilen)

berechne_gemittelten_verbrauch()
</code></pre>

<p>Thx in advance!</p>

<p>The following works.
Remind, iterating over the data in the line <code>anzahl_zeilen ...</code> makes it impossible to iterate again over your data.</p>

<p>2nd thing. <code>if spamreader.line_num &gt; 9 and spamreader.line_num &lt; anzahl_zeilen:</code> does neither really check the columns in the row nor if you're at the end. The iterator does the latter one for you. To cound the columns, use <code>len(row)</code> instead.</p>

<pre><code>import csv
spamreader = csv.reader(open('test.csv'), delimiter = ';')


def berechne_gemittelten_verbrauch():
    #anzahl_zeilen = sum(1 for row in spamreader) # kills your data / iterator is at the end
    verbraeuche_ab_reset = []
    for row in spamreader:
        if len(row) &gt; 9:
           verbrauch_ab_reset = row[7]
        verbraeuche_ab_reset.append(verbrauch_ab_reset)
    return verbraeuche_ab_reset

verb = berechne_gemittelten_verbrauch()
# subsets
print(verb[9:11]) 
</code></pre>

<p>Please read <a href="http://stackoverflow.com/questions/509211/explain-pythons-slice-notation">python subset notation</a></p>

<pre><code>a[start:end] # items start through end-1
a[start:]    # items start through the rest of the array
a[:end]      # items from the beginning through end-1
a[:]         # a copy of the whole array
</code></pre>

python python-3.x csv