我在本地目录中有这样的文件名列表。
['20150301','20150301121501.tar.gz','20150302', '20150302121501.tar.gz','20150303','20150303121501.tar.gz']
我想提取yyyymmdd目录名,而不是tar.gzfile。这是理想的结果。
['20150301','20150302','20150303']
我尝试了这个。
import re
pattern = "^(?!.*tar.gz).*$"
file_list = ['20150301',
'20150301100.tar.gz',
'20150302',
'20150302100.tar.gz',
'20150303',
'20150303100.tar.gz']
matchOB = re.match(pattern , file_list)
感谢阅读。
答案 0 :(得分:0)
您只需检查名称中没有“.tar.gz”的项目。
for fyle in ['20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz']:
if '.tar.gz' not in fyle:
print fyle
给出输出:
20150301
20150302
20150303
将输出作为列表:
my_list = ['20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz']
print [x for x in my_list if '.tar.gz' not in x]
有输出:
['20150301', '20150302', '20150303']
答案 1 :(得分:0)
您可以使用此代码,^\d+$
正则表达式匹配仅由数字组成的整个字符串:
import re
file_list = ['20150301',
'20150301100.tar.gz',
'20150302',
'20150302100.tar.gz',
'20150303',
'20150303100.tar.gz']
matchOB = [x for x in file_list if re.search(r"^\d+$", x)]
print(matchOB)
['20150301', '20150302', '20150303']
[x for x in file_list if re.search(r"^\d+$", x)]
列表推导返回列表中仅包含1位数的任何元素。
如果您的日期模式始终包含8位数字,则可以将^\d+$
模式替换为^\d{8}$
。
答案 2 :(得分:0)
按字符串处理:
我们可以使用isdigit()
字符串方法和len()
函数来验证字符串。
<强>演示:强>
>>> result = []
>>> input_dirs = ['20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz']
>>> for i in input_dirs:
... if i.isdigit() and len(i)==8:
... result.append(i)
...
>>> print result
['20150301', '20150302', '20150303']
答案 3 :(得分:0)
如果用
替换最后一个语句,则表达式可以正常工作matchOB = [re.match(pattern, file).group() for file in file_list if re.match(pattern, file)]
答案 4 :(得分:0)
或类似的东西:
list = ['20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz']
new_list=[]
for l in list:
if l.find(".")<0:
new_list.append(l)