2017-07-30 57 views
1

目錄中的一個完整的文件名,也有共享大部分人的名字兩個文件:的Python:獲得基於部分文件名

my_file_0_1.txt 
my_file_word_0_1.txt 

我想開my_file_0_1.txt

我需要以避免指定確切的文件名,而是需要在目錄中搜索與部分字符串my_file_0匹配的文件名。

this answer hereand this one,我試過如下:

import numpy as np 
import os, fnmatch, glob 

def find(pattern, path): 
     result = [] 
     for root, dirs, files in os.walk(path): 
       for name in files: 
         if fnmatch.fnmatch(name, pattern): 
           result.append(os.path.join(root, name)) 
     return result 

if __name__=='__main__': 

     #filename=find('my_file_0*.txt', '/path/to/file') 
     #print filename 
     print glob.glob('my_file_0' + '*' + '.txt') 

這些都不將打印的實際文件名,給我讀在以後使用np.loadtxt

如何根據字符串匹配的結果找到並存儲文件的名稱?

+2

'glob.glob'是我要走的路,我想。 'glob.glob('my_file_0 * .txt')'返回一個文件名列表,使用索引來檢索你需要的文件。 – vaultah

+0

同意。 'glob.glob'是'fnmatch'的一個包裝器,但它是一個包裝器,它正是你想要做的事情。 –

+0

@StatsSorceress確保你在運行腳本的目錄中有這樣的文件,因爲'glob'應該可以工作 –

回答

2

glob.glob()需要一個高效的路徑,如果您在另一個目錄中運行腳本,它不會找到您所期望的。 (你可以檢查與os.getcwd()當前目錄)

它應與線下工作:

print glob.glob('path/to/search/my_file_0' + '*.txt') 

print glob.glob(r'C:\path\to\search\my_file_0' + '*.txt') # for windows 
0

一個解決方案使用os.listdir()

不是也可能你使用os模塊搜索os.listdir()?例如:

import os 

partialFileName = "my_file_0" 

for f in os.listdir(): 
    if partialFileName = f[:len(partialFileName)]: 
     print(f)