如何从以特定字符序列开头的列表行中删除子字符串并生成输出文件

时间:2018-11-26 14:38:58

标签: python list

这是我的任务:我有一个带有以下文本行的file.txt:

CODE 1 DXVB: TLH - 188JSUY23000DI12
CODE 2 DXVB: DDH - 6SJ27GFKKKK29R82
CODE 3 DXVB: TSS - 9S676J1J87S88WJ2
WARNING 55DE2: CODE 4 DXVB: ASE - UDY239FJM9S7J25F
CODE 5 DXVB: RRE - DFUA83J398D7G928
WARNING 33E65: CODE 6 DXVB: RGR - FDS89987432JHOFE
WARNING 13WWQ: CODE 7 DXVB: HTR - DF7A09883J319SST
CODE 8 DXVB: YUY - 88324J269S7JJWQI

如您所见,某些行以子字符串“ WARNING #####:”开头,其中#####是唯一代码。我的任务是使用

在Python中读取此文件
with open('file.txt', 'r') as f:
    lines = f.readlines()

然后编辑列表,以便删除所有具有上述格式的子字符串,最终列表看起来像这样:

CODE 1 DXVB: TLH - 188JSUY23000DI12
CODE 2 DXVB: DDH - 6SJ27GFKKKK29R82
CODE 3 DXVB: TSS - 9S676J1J87S88WJ2
CODE 4 DXVB: ASE - UDY239FJM9S7J25F
CODE 5 DXVB: RRE - DFUA83J398D7G928
CODE 6 DXVB: RGR - FDS89987432JHOFE
CODE 7 DXVB: HTR - DF7A09883J319SST
CODE 8 DXVB: YUY - 88324J269S7JJWQI

列表最终将被写入一个名为output.txt的新.txt文件中。

基本上,每个以“ WARINIG”开头的列表行都应删除其前15个字符(已计空格)。 #####代码始终不同,file.txt将包含数千行。我是Python的新手。谢谢!

2 个答案:

答案 0 :(得分:0)

如何?打开输入文件,一行一行地读取它,用一个空字符串替换“ WARNING ...”,然后将其写入输出文件。

import re

rgx = r"^WARNING\s\w+:\s"
with open('file.txt', 'r') as fin, open('file_out.txt', 'w') as fout:
  for line in fin:
    fout.write(re.sub(rgx, "", line) + "\n")

答案 1 :(得分:0)

您可以创建一个新数组,并检查原始数组的每一行(如果该行中有'WARNING'),然后在第二' '处对其进行切片,然后将该行添加到新数组中(如果其中没有警告)行,将其未经修改地添加。

with open('file.txt', 'r') as f:
    lines = f.read().splitlines()
    new_lines = [' '.join(i.split()[2:]) if 'WARNING'in i else i for i in lines]

with open('new_file.txt', 'w') as f:
    f.write('\n'.join(new_lines))

输出:

CODE 1 DXVB: TLH - 188JSUY23000DI12
CODE 2 DXVB: DDH - 6SJ27GFKKKK29R82
CODE 3 DXVB: TSS - 9S676J1J87S88WJ2
CODE 4 DXVB: ASE - UDY239FJM9S7J25F
CODE 5 DXVB: RRE - DFUA83J398D7G928
CODE 6 DXVB: RGR - FDS89987432JHOFE
CODE 7 DXVB: HTR - DF7A09883J319SST
CODE 8 DXVB: YUY - 88324J269S7JJWQI