【问题标题】:Delete lines which contains numbers in python在python中删除包含数字的行
【发布时间】:2018-05-17 01:35:14
【问题描述】:

我必须复制一个文件,但在此之前我需要删除带有数字的行。

这是我的文件:

0:00:00.000,0:00:06.410
let's start with

0:00:04.470,0:00:10.769
something

0:00:06.410,0:00:12.360
easy

我想要这样的东西:

let's start with something easy

这是我的代码:

readFile = open("file.sbv")
writeFile = open("newwordlist.sbv","w")

for line in readFile: 
    newline = line.rstrip('\r\n')
    writeFile.write(newline)
readFile.close()
writeFile.close()

【问题讨论】:

  • 尝试使用readFile.readlines()——这将返回一个行列表。然后你可以过滤那些包含数字的。
  • @C8H10N4O2 取决于文件是否很大,您可能不希望整个文件都在内存中。

标签: python regex file


【解决方案1】:

你不需要正则表达式,你可以简单地使用any(i.isdigit() for i in line)

with open('in.txt') as infile, open('out.txt', 'w') as outfile:
  for line in infile:
    if not any(i.isdigit() for i in line):
      outfile.write(line)

in.txt

0:00:00.000,0:00:06.410
let's start with
0:00:04.470,0:00:10.769
something
0:00:06.410,0:00:12.360
easy

out.txt

let's start with
something
easy

如果你想要一行结果,你可以写line.rstrip('\r\n')而不是line,但这取决于你的文件使用的行尾,它可能只是\n

【讨论】:

  • 这很好,但我认为 OP 想摆脱换行符
【解决方案2】:

您可以尝试使用re.search 来识别数字行。假设该行 not 与此模式匹配,那么您将把它写出来:

readFile = open("file.sbv")
writeFile = open("newwordlist.sbv","w")

for line in readFile: 
    newline = line.rstrip('\r\n')
    if not re.search(r'^\d:\d{2}:\d{2}\.\d{3},\d:\d{2}:\d{2}\.\d{3}$', newline, re.M|re.I)
        writeFile.write(newline)
readFile.close()
writeFile.close()

此答案假设您可能确实有包含数字的行,但您不想删除这些行。我使用的模式针对您的示例数据中的时间戳行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-21
    • 2010-12-12
    • 2021-03-17
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    相关资源
    最近更新 更多