2017-04-23 24 views
1

請看看下面的僞多個CSV工作:writer.writerow不是寫在for循環

def main(): 
    queries = ['A','B','C'] 
    for query in queries: 
     filename = query + '.csv' 
     writer = csv.writer(open(filename, 'wt', encoding = 'utf-8')) 
     ... 
     FUNCTION (query) 

def FUNCTION(query): 
    ... 
    writer.writerow(XXX) 

我想寫信給多個CSV文件,所以我用for loop生成不同的文件名,然後寫入另一個文件def()

但是,這是行不通的,該文件將是空的。

如果我試圖擺脫使用main()或停止for loop

writer = csv.writer(open(filename, 'wt', encoding = 'utf-8')) 
     ... 
FUNCTION (query) 
def FUNCTION(query): 
     ... 
    writer.writerow(XXX) 

它會工作。

我不知道爲什麼?有關for loopmain()的任何內容?

回答

1

一個簡單的解決方法是將文件句柄而不是名稱傳遞給FUNCTION。由於該文件已在主被打開,你並不需要/想要的名字在子程序,只需將文件句柄所以更改呼叫FUNCTION(writer)和定義

def FUNCTION(writer):

,並使用writer.writerow(xxx)無論你需要在子例程中輸出流。

注意:您在示例中將文件指針的名稱從writer更改爲write

+0

工程像魔術!對我來說,這是一個很酷的教訓,學習通過文件句柄! – user815408

0

我認爲可能的原因是你沒有關閉文件指針。您可以使用上下文管理器,如:

with open(filename, 'wt', encoding = 'utf-8') as f: 
    writer = csv.writer(f) 
    ... 
    FUNCTION (query) 

這將幫助您自動關閉文件。

+0

不,它仍然不工作... – user815408