如何根据匹配模式的名称知道在 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()
是很棒的模式匹配工具。由于您的模式足够简单,startswith
和 endswith
将满足您的需要。
我有一个包含一些 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 ...
我有一个文件,其名称每天都会更新,但名称总是匹配一些简单的模式,例如它总是以 '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()
是很棒的模式匹配工具。由于您的模式足够简单,startswith
和 endswith
将满足您的需要。
我有一个包含一些 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 ...