【发布时间】:2016-12-13 20:18:51
【问题描述】:
我有一个例程搜索文件目录并从文件名中提取客户编号:
import os
import re
suffix= '.csv'
# For each file in input folder, extract customer number
input_list = os.listdir(path_in)
for input_file in input_list:
fileInput = os.path.join(path_in,input_file)
customer_ID = re.search('custID_(.+?)'+suffix,fileInput).group(1)
print(customer_ID)
suffix='.csv' 和一个装满 csv 文件的文件夹:
avg_hrly_custID_8147611.csv、avg_hrly_custID_8147612.csv、avg_hrly_custID_8147613.csv ...
我得到了预期的输出:
8147611, 8147612, 8147613...
但是,suffix = '.png' 和一个 .png 图像文件的文件夹:
yearly_average_plot_custID_8147611.png, yearly_average_plot_custID_8147612.png, yearly_average_plot_custID_8147613.png ...
我收到此错误:
AttributeError: 'NoneType' 对象没有属性 'group'
为什么它不适用于图像文件?
【问题讨论】:
-
虽然我不明白为什么它会以一种方式而不是另一种方式工作(在 regex101.com/r/zT7rJ7/1 上它们的行为相同),但您可能想要匹配
\.csv和\.png而不是.csv和.png只是为了安全起见。 -
您是否尝试打印出
fileInput字符串以确保您在正确的目录中? -
如果目录中有一个文件名不匹配,您的正则表达式将失败。你确定每个文件都匹配正则表达式吗?
-
感谢@BrenBarn。目录中有两个子文件夹,这导致了问题。我怎样才能阻止它失败 - 即忽略任何不匹配?
-
最直接的方法是将
re_search的结果赋值给一个变量,例如match,然后测试if match:。当re_search找到匹配项时,它将返回一个匹配实例,测试为 True;如果没有,它将返回 None,测试为 False。