2016-09-17 45 views
0

所以我做了很多瀏覽,但是我似乎無法打開我的文本文件,所以我可以開始操作它。用python打開和處理文本文件

我在同一個文件中救了我的計劃。我的第一線返回沒有錯誤:

fpath= r'/Users/veggiepunk1363/Desktop/geoproccessing/file_list.txt' 

with open(fpath) as f_in: 
    dates= f_in.read() 
    f_in.close() 

但現在是我的文件打開?該文本文件(file_list.txt)是:

3B43.20000101.7.tif

3B43.20000201.7.tif

3B43.20000301.7.tif

3B43.20000401.7.tif

3B43.20000501.7.tif ...

等等,所以現在我需要指定日期(1月,2月,3月等),而不是數字,但我沒有用過任何東西沒有「」,所以我是一個小夥子樂迷了,雖然我可以找到很多CSV文件,我還沒有找到我需要的txt文件,所以任何引用將不勝感激。

謝謝!

ps。如果有人知道如何將我的硬盤名稱更改爲veggiepunk1363以外的其他名稱,請告訴我!哈哈

我的新的代碼:

F =開放( '/用戶/ veggiepunk1363 /桌面/ geoproccessing/file_listmaster3.txt', 'R') FILEDATA = f.read() f.close()

揚= filedata.replace( 「20001」, 「2000Jan」)

二月= filedata.replace( 「20002」, 「2000Feb」)

三月= filedata.replace( 「20003」, 「2000Mar」)

四月= filedata.replace( 「20004」, 「2000Apr」)

五月= filedata.replace( 「20005」, 「2000May」)

君= filedata.replace( 「20006」,「2000Jun 「)

七月= filedata.replace(」 20007" , 「2000Jul」)

八月= filedata.replace( 「20008」, 「2000Aug」)

九月= filedata.replace(「20009 「,」2000Sep「)

十月= filedata.replace( 「20010」, 「2000Oct」)

十一月= filedata.replace( 「20011」, 「2000Nov」)

DEC = filedata.replace( 「20012」,「2000Dec 「)

F =開放( '/用戶/ veggiepunk1363 /桌面/ geoproccessing/file_listmaster3.txt', 'W')

F。寫(一月)

f.write(2月)

f.write(3月)

f.write(4月)

f.write(5月)

F。寫(6月)

f.write(7月)

f.write(8月)

f.write(9月)

f.write(10月)

f.write(11月)

f.write(十二月)

打印('的日期已經格式化')

f.close()

我知道這是很長的路要走做我想做,但我認爲它仍然會工作......它沒有。它使我的txt文件的大小增加了三倍,它看起來像一切都重複?不太清楚發生了什麼事。

+0

您是否運行過它?你的文件在'with'塊中打開,當塊退出時自動關閉(所以不需要'dates = f_in.close()')。您的代碼將文件的全部內容讀入「日期」中。一個通常使用for循環逐行讀取數據(例如,'for in line in f_in:'而不是'read()'。嘗試建立一個循環來處理這些行,然後提交一個示例。 – tdelaney

+1

Side-note :當你使用'with'語句時,對'close'的明確調用是不必要的和多餘的(如果你使用'with'語句,那麼資源清理是自動的,不會被忽略/跳過)。 – ShadowRanger

+0

編輯。 ..我想出了開始/結束,但在編輯我的數據時出現了意想不到的結果。 – UTSloth

回答

-1

您不需要使用上下文管理器。這非常簡單,並且不需要您明確關閉文件描述符:

for file_name in open(fpath).readlines(): 
    print file_name # 3B43.20000101.7.tif... 
+1

這不是一個答案,也不是它的性能(對於大文件,'readlines'意味着在開始之前等待讀取內存中的整個文件處理並將其全部存儲在內存中,其中直接迭代文件對象立即開始,並且一次只在內存中保留一行),而在非CPython解釋器中,您將具有非確定性的「close」行爲( 'with'語句給你確定性的關閉b無處不在的行爲,這就是爲什麼你儘可能使用它)。 – ShadowRanger

+0

我從來沒有聲稱'readlines'是內存效率或性能。有辦法懶惰地閱讀文件。我只是提出一個更簡單,更容易推理的替代方案。 – LINKIWI

+0

你可以從字面上提供完全相同的代碼,而不需要'.readlines()',它會更少「錯誤」。儘管如此,積極鼓勵他們不使用'with'的形式仍然不好。而且還不是_answer_。 – ShadowRanger

-2

試試這種方法。 veggiepunk1363不是您的硬盤的名稱。它是您的User文件在Windows上的文件夾。

fpath= r'/Users/veggiepunk1363/Desktop/geoproccessing/file_list.txt' 

with open(fpath, 'r') as f_in: #opens the file with read mode 
    dates = f_in.readlines() #returns a list of all the lines in the file into dates