2017-08-06 46 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只會在每個循環中運行一次。

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文件並返回一個數組,每個數值的平方。例如,如果輸入文件看起來像:

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

輸出將是:

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

見例如:

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) 

請注意,我們閱讀和itterating在之前拆分輸入文件行和我們爲每行創建一個結果數組,以及作爲整個表的數組,我們爲每行添加數組。

不知道這是否正是你想要做的,但你發佈的東西看起來很奇怪......