2017-01-24 19 views
0

我試圖打開一個隨機時間日期戳記作爲其名稱的一部分的文件。大部分文件名稱已知,例如filename = 2017_01_23_624.txt是我的測試名稱。日期和數字是我試圖用未知的東西取代的部分,因爲它會改變。 我的問題涉及到打開一個現有的文件,而不是創建一個新的文件名。文件名是由一個單獨的程序創建的,我必須能夠打開它們。一旦他們開放,我也想改變它們。 我一直在嘗試構建如下的文件名字符串,但無效的語法。我如何用變量名在python中打開文件?

filename = "testfile" + %s + ".txt" 
print(filename) 
fo = open(filename) 
+0

可能重複的[python插入變量字符串作爲文件名](http://stackoverflow.com/questions/14622314/python-inserting-variable-string-as-file-name) – bzimor

+0

不完全。我的文件名字符串比那個更復雜。 – Dindsy

回答

0

無法打開包含通配符的部分文件名的文件進行匹配。你需要做的是查看目錄中的所有文件,並選擇最匹配的文件。

簡單的例子:

import os 

filename = "filename2017_" # known section 
direc = r"directorypath" 

matches = [ fname for fname in os.listdir(direc) if fname.startswith(filename) ] 
print(matches) 

但是,您可以使用glob模塊(感謝bzimor)模式匹配您的文件。有關更多信息,請參閱glob docs

import glob, os 

# ? - represents any single character in the filename 
# * - represents any number of characters in the filename 
direc = r"directorypath" 
pattern = 'filename2017-??-??-*.txt' 
matches = glob.glob(os.path.join(direc, pattern)) 
print(matches) 

先解決類似的是,你還回來的文件名列表供然後打開選擇。但是如果您需要的話,glob模塊可以更準確地匹配您的文件。這一切都取決於你想要它有多緊張。

+0

或簡單的方法是使用'glob'和通配符作爲文件名。添加這個'glob'模塊版本 – bzimor

+0

謝謝。我想我可能不得不這樣做,但不知道目錄命令。我幾乎有它,但我的文件名輸出如下。它包括方括號和'quotes.C:\ TEMP \ Python> python test.py ['testfile2017_01.txt'] Traceback(最近調用最後一次): 文件「test.py」,第9行,在 fo = open(matches) TypeError:無效文件:['testfile2017_01.txt'] – Dindsy

+0

@Dindsy'matches'是一個列表,您需要從中選擇一個文件名。也看到更新的答案。可能會發現'glob'模塊是一個更好的選擇。 –