2017-08-06 3 views
1

次のコードは2 \ n 4 \ n 6 \ n 8 \ nになります。私はその結果を次のように機能としてそれを使用しようとすると文書の長さの関数を実行する方法

with open('test.csv','r')as document: 
    for line in document: 
     line=line.split(',') 
     for item in line: 
      item=item.replace('\n','') 
      item=int(item)*2 
      print(item) 

しかし、唯一の2

def results(): 
    with open('test.csv','r')as document: 
     for line in document: 
      line=line.split(',') 
      for item in line: 
       item=item.replace('\n','') 
       item=int(item)*2 
       return item 

print(results()) 

おそらくこれだけの機能を一回実行されています。ドキュメントの長さに合わせて関数を実行するにはどうすればよいですか?ありがとう。

答えて

3

アイテムを追加するためのリストを作成する必要があります。最初の反復でreturnがあるため、関数は各ループを1回だけ実行します。

def results(): 
    items = list() 
    with open('test.csv','r')as document: 
     for line in document: 
      line=line.split(',') 
      for item in line: 
       item=item.replace('\n','') 
       item=int(item)*2 
       items.append(item) 
    return items 

In [6]: results() 
Out[6]: [2, 4, 6, 8] 

それとも、同じロジックを維持し、発電機の作成にyieldを使用することができます。

def results(): 
    with open('test.csv','r')as document: 
     for line in document: 
      line=line.split(',') 
      for item in line: 
       item=item.replace('\n','') 
       item=int(item)*2 
       yield item 


In [4]: [i for i in results()] 
Out[4]: [2, 4, 6, 8] 

注発電がクリーンアップされるまで、この後者の例では、開いているファイルを保持します。

1

ファイルの行を正しく反復しているわけではありません。次のコードは、cvsファイルを読み込み、各値が2乗された配列の配列を返します。たとえば、入力ファイルがように見えた場合:

1,2,3 
4,5,6 
7,8,9 

出力は次のようになります。

[[1,4,9],[16,25,36],[49,64,81]] 

を参照してください。例:私たちが読んでオーバーitterating前に、入力ファイルを分割

def results(): 
    arrayOfResults = [] 
    with open('test.csv','r')as document: 
     lines = document.read().split("\n") 
     for line in lines: 
      items=line.split(',') 
      resultsForThisLine = [] 
      for item in items: 
       resultsForThisLine.append(int(item)**2) 
      arrayOfResults.append(resultsForThisLine) 
print(arrayOfResults) 

お知らせ各行の結果の配列を作成するだけでなく、各行の配列を追加するテーブル全体の配列も作成します。

これがまさにあなたがやろうとしていることですが、あなたが投稿した内容がかなり変わったように見えるかどうかわかりません。

関連する問題