2016-09-02 5 views
0

여러 줄의 CSV 파일을 읽고 싶습니다. 목록을 열어 하나의 행을 목록에 추가합니다. 그런 다음 목록을 인쇄하려고합니다. 그러나 목록은 비어 있습니다. CSV 파일은 다음과 같습니다 : 사전에.csv 파일에서 여러 줄 읽기.

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

들으 :

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

이 내 코드입니다!

+0

처음에는'if' 문을 제거하십시오. 'line_num' dos는 필드를 계산하지 않는다고 생각합니다. – tuergeist

+0

'anzahl_zeilen'을 계산할 때 파일을 이미 소비했기 때문에'for rowreader in row '가 반복 될 필요가 없습니다. – jonrsharpe

+0

목표를보다 정확하게 설명 할 수 있습니까? 당신은 CSV 파일의 여러 줄을 읽고 싶지만 거기에 코드 조각에서 실제로하려고하는 것을 이해하는 데 문제가 있습니다 ... –

답변

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

당신이 두 번 spamreader 반복되는 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 
+0

아직 내가 원하는 것을하지 않습니다. 이제 목록에는 빈 내용이 포함되어 있습니다. 그래, 그렇습니다. 데이터를 반복하지만 내용을 얻지는 못하고 읽고 싶은 특정 행을 읽지 않습니다. –

+0

먼저,이 대답은 당신의 질문을 해결합니다. 특정 라인에 관심이 있다는 것을 지정하지 않았습니다. 그러나 당신은 이것을 쉽게 할 수 있습니다. 답변이 수정되었습니다. – tuergeist

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을 반복 할 때,

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) 
+0

제안 된 솔루션이 작동하지 않습니다. – tuergeist

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 
+0

고마워요! 하지만 9시 11 분까지 줄을 인쇄하려면 어떻게해야합니까? lines = df.ix [: 9-11, [c1, c2, c3, c4, c5, c6, c7, c8, c9]]? –