通过说我对Python完全不熟悉,但不是编程新手来做到这一点。
我一直在尝试使用glob.glob编译文件名列表以供进一步分析。
我的文件遵循以下格式:
现在,我使用
检查文件glob.glob("File ?.csv")
然而,我刚刚意识到,当我到达File 10时,这将不再有效,因为'?'通配符只能替换1个字符。
除了必须重命名这些文件以符合位数之外(例如:格式化文件3到03,如果文件数> 10但是<100),我可以通过哪些方式来容纳附加数字?
我可以在一定程度上预测文件的数量,但数量可以是1到10,甚至是数百个。
答案 0 :(得分:3)
你不能用glob匹配任意数量的数字,如果你想特别匹配File some_digits.csv
,你需要一个正则表达式:
import glob
import re
import os
patt = re.compile(r"File \d+\.csv")
for f in os.listdir("."):
if patt.match(f):
print(f)
如果您确定如果有一个数字,那么这是一个匹配,您可以使用File [0-9]*.csv
,这将确保有一个数字:
import glob
glob.glob("/path_to/File [0-9]*.csv"))
当然,这也会与File 1abc.csv
匹配,但您当前的"File ?.csv"
会匹配File a.csv
等等。这不是数字。
答案 1 :(得分:0)
分两步完成:
import glob
import re
# First match all files which fit the general pattern (will match things
# like "File name without numbers.csv"
gross_match = glob.glob("File *.csv")
# Filter the list with a precise regular expression
my_files = [fname for fname in gross_match if match("File [0-9]+.csv", fname)]
通过预编译正则表达式可以提高性能。