[英]Open file knowing only a part of its name
我正在讀取文件並使用以下行導入其中的數據:
# Read data from file.
data = np.loadtxt(join(mypath, 'file.data'), unpack=True)
知道變量mypath
地方。 問題是文件file.data
會隨着時間而變化,假定名稱如下:
file_3453453.data
file_12324.data
file_987667.data
...
因此,我需要一種方法來告訴代碼在該路徑中打開文件,其名稱類似於file*.data
,假設路徑中始終只有一個文件名。 有沒有辦法在python
執行此操作?
您可以使用glob
模塊。 它允許在文件名上進行模式匹配,並完全按照您的要求進行操作
import glob
for fpath in glob.glob(mypath):
print fpath
例如,我有一個名為google.xml,google.json和google.csv的文件的目錄。
我可以像這樣使用glob:
>>> import glob
>>> glob.glob('g*gle*')
['google.json', 'google.xml', 'google.csv']
請注意, glob
使用fnmatch
模塊,但它有一個更簡單的接口,它只匹配路徑而不是文件名。
您可以搜索相對路徑,而不必使用os.path.join
。 在上面的示例中,如果我更改為父目錄並嘗試匹配文件名,則返回相對路徑:
>>> import os
>>> import glob
>>> os.chdir('..')
>>> glob.glob('foo/google*')
['foo/google.json', 'foo/google.xml', 'foo/google.csv']
還看看fnmatch
:
>>> import fnmatch
>>> import os
>>>
>>> fnmatch.filter(os.listdir('.'), 'file_*.data')
['file_3453453.data']
>>>
我簡單的解決方案是使用python模塊“os”和“re”:
import os
import re
for file in os.listdir(mypath):
if re.match("file_\d+\.data", file):
...
嘗試
import os
[os.path.join(root, f) for root, _, files in os.walk(mypath)
for f in files
if f.startswith('file') and f.endswith('.data')]
如果有多個file*.data
,它將返回所有文件file*.data
的列表。 你可以迭代它們。 如果只有一個文件,那么只需將[0]
放在列表推導的末尾即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.