Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以类似文件名加载文件的Pythonic方式_Python_Python 3.x_Pathlib - Fatal编程技术网

以类似文件名加载文件的Pythonic方式

以类似文件名加载文件的Pythonic方式,python,python-3.x,pathlib,Python,Python 3.x,Pathlib,我正在使用pathlib.Path()检查文件是否存在,并使用将其作为图像打开 但是,我正在加载的目录中的某些文件的文件名略有不同,例如my_filename.tif(不带连字符)或my_file_name.tif(用下划线代替连字符) 所有文件名都具有相同的基本结构。有没有更好的方法来调用pathlib.Path(),使用filename.tif中所有可能的变体,而不仅仅是检查它们是否都存在?e、 g 您可以使用正则表达式来查看目录中是否有匹配的文件。但您也可以检查文件名是否包含所有必要的组件

我正在使用
pathlib.Path()
检查文件是否存在,并使用将其作为图像打开

但是,我正在加载的目录中的某些文件的文件名略有不同,例如
my_filename.tif
(不带连字符)或
my_file_name.tif
(用下划线代替连字符)

所有文件名都具有相同的基本结构。有没有更好的方法来调用
pathlib.Path()
,使用
filename.tif中所有可能的变体,而不仅仅是检查它们是否都存在?e、 g


您可以使用正则表达式来查看目录中是否有匹配的文件。但您也可以检查文件名是否包含所有必要的组件。下面是一个您可以调整的示例:

dir = pathlib.Path("./")
must_contain = ['my', 'file', 'name', '.tif']
true_filepath = None
for filepath in os.listdir(dir):
    if all([item in filepath for item in must_contain]):
        true_filepath = filepath
        break
这将选择包含所有必要组件的第一个项目。如果您对组件必须采用的形式有特定的要求,那么我建议使用正则表达式路径,在该路径中,您可以使用符合您需要的正则表达式。以下是python 3中正则表达式包的文档


希望这有帮助,快乐编码

您可以尝试
Path().glob(*.tif”)
,然后查看与
“我的文件名”
之间levenberg距离较低的文件名,为什么不
glob.glob(./my_文件*name.tif”)
?@Dan您有没有链接,我可以从中了解更多关于字符串之间levenberg距离的信息?(文件名)@GustavRasmussen抱歉,打字错误,谢谢,看起来很有趣谢谢!我最终同意了Jean的建议,使用了更短的
glob.glob(“./my_file*name.tif”)
。如果近期没有其他答案,我会接受你的。
filename = pathlib.Path("./my_file-name.tif")
if not file.is_file():
    file = Path("./my_file_name.tif")
if not file.is_file():
    file = Path("./my_filename.tif")
dir = pathlib.Path("./")
must_contain = ['my', 'file', 'name', '.tif']
true_filepath = None
for filepath in os.listdir(dir):
    if all([item in filepath for item in must_contain]):
        true_filepath = filepath
        break