Python 对文本中的特定数字进行排序,如果没有数字,则返回注释

Python 对文本中的特定数字进行排序,如果没有数字,则返回注释,python,csv,Python,Csv,我有一些文字记录,里面有数字。我只想提取5位数字,其他的都留下。有些有多个5位数字,我只取第二个。 有些记录没有任何数字,或者是输入文件:fin as 34567 ds 34 fd 12234 12323 asds as ds 34 fd 12234 12323 asds as 34567 ds 34 fd 12234 12323 asds as 345673 ds 34 fd 12234 12323 asds as 34567 ds 34 fd 12234 12323 asds as 5343

我有一些文字记录,里面有数字。我只想提取5位数字,其他的都留下。有些有多个5位数字,我只取第二个。
有些记录没有任何数字,或者是输入文件:
fin

as 34567 ds 34 fd 12234 12323 asds
as ds 34 fd 12234 12323 asds
as 34567 ds 34 fd 12234 12323 asds
as 345673 ds 34 fd 12234 12323 asds
as 34567 ds 34 fd 12234 12323 asds
as 5343 ds 34 fd 12234 12323 asds
a

asd lkj 234
lklkkl lklk
代码:

输出文件:
fout

34567

34567

34567

正则表达式很简洁,但入门时有点困难。这是一个上面写着“如果至少有一个五位数的数字,就进行最后一场比赛”


您会注意到从
findall
search
的变化,因为我们只关心匹配或不匹配,而
*
在匹配之前尽可能地跳过(有效地搜索到字符串的末尾,然后回溯直到找到匹配)以及数字周围的装饰,以避免从长度超过5位的数字中选取子字符串;最后一个条件是,如果没有匹配项,则不附加任何内容。

以后,请您的问题提供这些详细信息。正如你所看到的,这些评论对于交流这些东西不是很好,即使删除了评论,问题也应该独立存在。另外,请回顾一下转录,并考虑删除现在过时的评论。但是仍然不清楚如果行中只包含一个5位数的数字会发生什么情况。@khan请提供所有的情况。@khan因为您是新来的,我建议您先读一读。当您在单个循环中找到输入文件中的匹配项时,您可能只需写入输出文件,但我并没有在这个答案中提到重构。
34567
12323
23412
as 34567 ds 34 fd 12234 12323 asds
as ds 34 fd 12234 12323 asds
as 34567 ds 34 fd 12234 12323 asds
as 345673 ds 34 fd 12234 12323 asds
as 34567 ds 34 fd 12234 12323 asds
as 5343 ds 34 fd 12234 12323 asds
a

asd lkj 234
lklkkl lklk
with open('fin', 'r') as f, open('fout', 'w') as f2:
    lines = f.read().split('\n')
    lines = [a.split() for a in lines]
    reqlines = [a[1]  if a[1].isdigit and len(a[1])==5 else '' for a in lines if len(a) >=2 ]
    for l in reqlines:
        f2.write(l+'\n')
34567

34567

34567
for row in zipfile:
    value=re.search(r'(?:.*\D)?(\d{5})(?:\D.*)?$', str(row))
    if value:
        reader.append(value.group(1))