Python:根据部分文件名获取完整的文件名

时间:2017-07-30 20:43:20

标签: 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阅读。

如何根据字符串匹配的结果找到并存储文件名?

3 个答案:

答案 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.listdir()

的解决方案

您是否还可以使用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))