在目录中,有两个文件共享大部分名称:
my_file_0_1.txt
my_file_word_0_1.txt
我想打开my_file_0_1.txt
我需要避免指定确切的文件名,而是需要在目录中搜索与部分字符串my_file_0
匹配的文件名。
从this answer here,and 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
阅读。
如何根据字符串匹配的结果找到并存储文件名?
答案 0 :(得分:3)
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
答案 1 :(得分:0)
您是否还可以使用os
模块搜索os.listdir()
?例如:
import os
partialFileName = "my_file_0"
for f in os.listdir():
if partialFileName = f[:len(partialFileName)]:
print(f)
答案 2 :(得分:0)
我刚刚开发了以下方法,并进行搜索以查看是否有更好的方法,并遇到了您的问题。我认为您可能喜欢这种方法。我几乎需要与您一样的东西,并使用列表推导方法得出了一个干净的衬纸,并确定只有一个符合我标准的文件名。我修改了代码以匹配您的问题。
import os
file_name = [n for n in os.listdir("C:/Your/Path") if 'my_file_0' in n][0]
print(file)
现在,如果这是循环/重复通话情况,则可以进行以下修改:
for i in range(1, 4):
file = [n for n in os.listdir("C:/Your/Path") if f'my_file_{i}' in n][0]
print(file)
或者实际上更可能是...
def get_file_name_with_number(num):
file = [n for n in os.listdir("C:/Your/Path") if f'my_file_{num}' in n][0]
return file
print(get_file_name_with_number(0))