读取.csv文件中的几行

时间:2016-09-02 09:04:48

标签: python python-3.x csv

我想阅读几行CSV文件。我打开一个列表并将一行追加到列表中。然后我尝试打印列表。但清单是空的。 CSV文件如下所示:

`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;
`

这是我的代码:

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 > 9 and spamreader.line_num < anzahl_zeilen:
            verbrauch_ab_reset = row[7]

            verbraeuche_ab_reset.append(verbrauch_ab_reset)

    print(verbraeuche_ab_reset)
    print(anzahl_zeilen)

berechne_gemittelten_verbrauch()
提前谢谢!

3 个答案:

答案 0 :(得分:0)

以下作品。 提醒,迭代行anzahl_zeilen ...中的数据会使您无法再次对数据进行迭代。

第二件事。 if spamreader.line_num > 9 and spamreader.line_num < anzahl_zeilen:既没有真正检查行中的列,也没有检查到最后。迭代器为你做后者。要更改列,请改用len(row)

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) > 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]) 

请阅读python subset notation

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

答案 1 :(得分:0)

您的代码存在的问题是您正在迭代垃圾邮件阅读器两次。你只能这样做一次。

这句话将得出正确答案。

anzahl_zeilen = sum(1 for row in spamreader)

但是当你现在迭代同一个垃圾邮件阅读器时,你会得到一个空列表,因为你已经迭代过一次文件

for row in spamreader:
    if spamreader.line_num > 9 and spamreader.line_num < anzahl_zeilen:
        verbrauch_ab_reset = row[7]

        verbraeuche_ab_reset.append(verbrauch_ab_reset)

解决这个问题,

spamreader = csv.reader(open('test.csv'), delimiter = ';')
    anzahl_zeilen = sum(1 for row in spamreader)
    spamreader = csv.reader(open('test.csv'), delimiter = ';')
        for row in spamreader:
            if spamreader.line_num > 9 and spamreader.line_num < anzahl_zeilen:
                verbrauch_ab_reset = row[7]

                verbraeuche_ab_reset.append(verbrauch_ab_reset)

答案 2 :(得分:0)

# try this code its very simple
input:
filename :samp1.csv
c1;c2;c3;c4;c5;c6;c7;c8;c9;
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;
#read the file
import pandas as pd
data = pd.read_csv('samp1.csv',sep=';')
df = pd.DataFrame({'c1':data.c1,'c2':data.c2,'c3':data.c3,'c4':data.c4,'c5':data.c5,'c6':data.c6,'c7':data.c7,'c8':data.c8,'c9':data.c9,})

#suppose we want to print first 6 lines
lines = df.ix[:5,['c1','c2','c3','c4','c5','c6','c7','c8','c9']]
print(lines)
output:
      c1   c2   c3   c4    c5   c6           c7             c8              c9
0  hallo  das  ist  ein  test  der  hoffentlich   funktioniert  fingerscrossed
1  hallo  das  ist  ein  test  der  hoffentlich  funktioniert1  fingerscrossed
2  hallo  das  ist  ein  test  der  hoffentlich  funktioniert2  fingerscrossed
3  hallo  das  ist  ein  test  der  hoffentlich  funktioniert3  fingerscrossed
4  hallo  das  ist  ein  test  der  hoffentlich  funktioniert4  fingerscrossed
5  hallo  das  ist  ein  test  der  hoffentlich  funktioniert5  fingerscrossed