如何根据匹配模式的名称知道在 Python 中打开(并打开)哪个文件?

How to know which file to open (and open it) in Python based on its name matching a pattern?

我有一个文件,其名称每天都会更新,但名称总是匹配一些简单的模式,例如它总是以 'report' 开头,例如报告 1 个 2X.csv

我如何在任何一天打开文件,不知道它的名字是什么,但知道模式并且知道文件夹中永远只有一个匹配的文件?

如果我定义:

pattern = 'report'

那么我该如何将 os.listdir('.')str.startswith(pattern)open() 结合起来才能达到这个目的?

试试这个:

from glob import glob
file = open(glob('report *')[0])

你可以用正则表达式找到这样的东西:

import re
x = re.findall(r'report.*csv', 'any text here report 1 A 2X.csv some more stuff here' )

输出:

['report 1 A 2X.csv']

您可以看看 glob 模块。它接受一个模式和 returns 匹配该模式的所有文件的列表。

例子-

>>> import glob
>>> glob.glob('*.py')
['a.py', 'b.py', 'getpip.py']

然后您可以遍历此 glob.glob 的结果并打开每个文件并执行您的逻辑 -

例子-

for f in glob.glob('report*'):
    <your logic>

请注意,glob 使用 shell-style 模式通配符(不是正则表达式)。

正如其他人所指出的,re, glob, and fnmatch() 是很棒的模式匹配工具。由于您的模式足够简单,startswithendswith 将满足您的需要。

我有一个包含一些 csv 文件的目录,特别是一个名为 report_1_A_2x.csv 的目录。我们可以列出所有以 report 开头并以 .csv 结尾的 csv 文件。在这种情况下,只有一个匹配,所以我们打开它然后做一些事情:

import os

path = '.' # path to file
pattern = 'report'
suffix = '.csv'

files = [f for f in os.listdir(path) if f.startswith(pattern) and f.endswith(suffix)]
print files # prints: ['report_1_A_2x.csv']

with open(os.path.join(path, files[0]), 'r') as rep:
    # do something ...