簡體   English   中英

打開文件只知道其名稱的一部分

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM