2016-09-02 10 views
0

CSVファイルの複数行を読みたいと思います。私はリストを開き、そのリストに1行を追加しています。それから私はリストを印刷しようとします。しかし、リストは空です。 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() 

Thxを:

`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 spamreader'の行はループしません。 – jonrsharpe

+0

あなたの目標をより正確に説明できますか?あなたはcsvファイルのいくつかの行を読みたいと言っていますが、あなたのコードスニペットで実際に何をしようとしているのかを理解するのに問題があります... –

答えて

0

次のように動作します。 anzahl_zeilen ...行のデータを繰り返し処理して、データを繰り返し処理することはできません。

第2のもの。 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) 

が、あなたは今、同じ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
、この使用を解決するために

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) 

たら、ファイルの上に反復しておりますので、あなたは、空のリストを取得します

# 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時までの行を印刷したいのですが?行= df.ix [:9-11、[c1、c2、c3、c4、c5、c6、c7、c8、c9]]? –

関連する問題