2012-04-01 71 views
0

我已經寫在Python的幾行代碼,看看我是否可以把它讀取文本文件,做一個清單出來的,其中線清單自身,然後將所有內容都轉換回字符串,並將其作爲輸出寫入不同的文件。這可能聽起來很愚蠢,但想法是一旦列出項目就洗牌,我需要確保我可以先正確地進行閱讀和寫作。這是代碼:Python代碼不寫,除非運行到文件中解釋

import csv,StringIO 

datalist = open('tmp/lista.txt', 'r') 

leyendo = datalist.read() 
separando = csv.reader(StringIO.StringIO(leyendo), delimiter = '\t') 

macrolist = list(separando) 

almosthere = ('\t'.join(i) for i in macrolist) 

justonemore = list(almosthere) 

arewedoneyet = '\n'.join(justonemore) 

with open('tmp/randolista.txt', 'w') as newdoc: 
    newdoc.write(arewedoneyet) 

newdoc.close() 
datalist.close() 

這似乎當我通過在解釋線運行線工作得很好,但是當我將它保存爲一個單獨的Python腳本並運行它(myscript.py)沒有任何反應。輸出文件甚至沒有創建。看了這裏提出的類似問題之後,我引入了'with'參數(在通過output = open()打開輸出文件之前),我已經嘗試刷新以及關閉文件...似乎沒有任何工作。獨立腳本似乎沒有多大作用,但如果代碼在解釋器上工作,代碼不會太錯誤,對吧?

在此先感謝!

P.S:我是新來的Python和相當新的編程,所以我道歉,如果這是由於基本問題的認識膚淺。

+1

有沒有必要做'newdoc.close()' - 它會自行關閉,一旦你掉下來的'with'語句的結束。另外,你不需要使用'StringIO'''csv.reader(datalist,delimiter ='\ t')'就足夠了。 – lvc 2012-04-01 09:26:35

+0

我已經把close()語句拿出來了,它仍然不起作用... – 2012-04-01 09:32:48

回答

4

哪裏輸入文件,並在那裏你要保存的輸出文件。對於這種腳本我認爲這是更好地使用絕對路徑

用途:用於

open('/tmp/lista.txt', 'r') 

代替:

open('tmp/lista.txt', 'r') 

我認爲錯誤可以與此

+0

謝謝!這可能是一個路徑問題,是的。但我沒有看到這兩個例子之間的區別... – 2012-04-01 09:34:59

+0

我編輯我的文章。 tmp的主導斜線 – 2012-04-01 09:41:26

+0

謝謝您的建議,我會盡力在將來記住它。這個問題現在已經解決了(這確實是一個問題),請參閱其他答案! – 2012-04-01 10:11:35

2

這可能與你開始翻譯的地方有關。

嘗試使用絕對路徑/tmp/randolista.txt而不是相對路徑tmp/randolista.txt來隔離問題。

+0

謝謝!好吧,它已經解決了,這確實是一個路徑問題,而且這是一個非常愚蠢的問題。解釋器的路徑很好,但不適用於放置腳本的文件夾(與輸入文件相同),所以無法找到文件夾。我真誠道歉浪費你的時間。非常感謝你! – 2012-04-01 09:37:13

+0

@JorgeGonzález無後顧之憂。所有關於提問的問題,都不需要道歉。 – 2012-04-01 09:44:22

+0

非常感謝!我前一段時間發現了它,但直到現在纔開始閱讀。夢幻般的社區。再次感謝。 – 2012-04-01 10:12:38