[英]Regex trouble with list comprehension
I am working in Python 3.7.6 on Windows and am attempting to use regex to transform one list of foo.csv.gz
filenames into a list of the corresponding foo.csv
filenames. 代码片段如下。
zippedFileNames = [re.search('[^/]*\\.gz', link).group(0) for link in linksList]
unzippedFileNames = [re.search('.*\\.csv', name).group(0) for name in zippedFileNames]
在上面的代码中, zippedFileNames
是通过从下载链接列表中隔离.gz
文件名而创建的列表。 这条线按我的预期工作,并且采用zippedFileNames[0]
返回一个字符串。 zippedFileNames[0]
的类型是str
, zippedFileNames
的类型是list
。
但是,代码在第二行引发错误:
Exception has occurred: AttributeError
'NoneType' object has no attribute 'group'
File "H:\foo\bar\foobar.py", line 133, in <listcomp>
x = [re.search('.*\\.csv', name).group(0) for name in zippedFileNames]
File "H:\foo\bar\foobar.py", line 133, in <module>
x = [re.search('.*\\.csv', name).group(0) for name in zippedFileNames]
这段代码昨天工作,但今天停止工作,我不确定我改变了什么来破坏它。 我相信在我尝试修改第二行的pattern
以使用模式'[^0-9\\_].*\\.csv'
(文件名都遵循模式0000_foo_bar_foobar.csv.gz
)。 但是,即使在遗漏之前将模式恢复为旧模式也不能解决我的问题。
有什么我没看到的吗?
谢谢!
编辑:
谢谢您的回答。
我通过打印所有列表项和使用print(None in zippedFileNames)
检查了我的列表中是否有None
。 后一个测试返回False
,前一个返回所有项目,如我所料。 我也没有在我的链接列表中找到None
。
当我仅对 linksList 的一个元素linksList
linksList[0]
运行正则表达式re.search
时,我得到了正确的字符串 output。
我还有其他可以尝试的方法吗?
编辑2:
我尝试在单独的调用中重新使用原始正则表达式模式'[^/]*\\.gz'
并且它有效。 然后我还尝试使用模式'[^/]*\\.csv\\.gz'
希望获得与前一种模式相同的结果,但这种模式也返回了错误。 我怀疑这些错误与\\.csv
。
解决方案我在.csv
上进行匹配,但事实证明我也有一个.report
文件,而且那个文件正在丢弃整个脚本。 遍历匹配有助于隔离问题。 为了解决正则表达式,我匹配了模式'.*\\[^.gz]'
以保留所有文件扩展名,而不仅仅是.csv
。 非常感谢!!
检查您正在使用的列表、zippedFileNames 或 linksList 中是否有 None 或空值。
您可以使用
import re
zippedFileNames=['0001_foo1.csv', 'def.bz', '0000_foo2.csv.gz']
unzippedFileNames = []
for name in zippedFileNames:
m = re.match(r"\d+_(.*\.csv)", name)
if m:
unzippedFileNames.append(m.group(1))
print(unzippedFileNames)
# => ['foo1.csv', 'foo2.csv']
请参阅Python 演示。
在这里, unzippedFileNames
被声明为一个空列表。 然后,遍历zippedFileNames
,每个名称都根据\d+_(.*\.csv)
正则表达式进行检查(注意re.match
仅在字符串的开头搜索匹配项),如果有匹配项( if m:
)第 1 组的内容被附加到unzippedFileNames
列表中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.