Python:在文本中查找和删除字符串

时间:2019-07-23 09:49:38

标签: python regex string text

我正在尝试整理一个大的文本文件,其中包含用户和有关他们的信息。任务是从特定用户清除此文本,删除用户以及下面的有关该用户的所有信息。

文件示例:

User=Andy
Age:12
Weigh:45
...
reg.info:12
User=Sam
...

它是牢固的.csv文件的问题,我不知道继续进行。

这是我的代码如何查找特定用户的行及其行号:

user = []
linenum = 0
pattern = re.compile("Andy", re.IGNORECASE)  # Compile a case-insensitive regex
with open ('UserDB.csv', 'rt') as myfile:    
    for line in myfile:
        linenum += 1
        if pattern.search(line) != None:      # If a match is found 
            user.append((linenum, line.rstrip('\n')))
for err in user:                            # Iterate over the list of tuples
    print("Line " + str(err[0]) + ": " + err[1]) 

输出:

Line 622909: "User=Andy"

现在如何删除该用户下方的所有行,而有关下一个用户的信息尚未开始?

3 个答案:

答案 0 :(得分:0)

为什么您也不打开另一个文件来写入新值,即没有要删除部分的名称。浏览完所有条目后,您可以删除旧文件并保留新文件。

with open('UserDB.csv', 'rt') as infile:
   with open('new_UserDB.csv', 'w') as outfile:
      for line in infile:
          list.append(processing(line))
          outfile.write(processing(line))

答案 1 :(得分:0)

我不完全知道您的CSV文件的外观,但是只要文字像您所写的一样,您可以使用以下正则表达式选择Andy的所有信息

(?<=User=Andy\n)(.+\n)+(?=User)

(?<=User=Andy\n)是确保我们选择正确的用户(在本例中为Andy)背后的积极眼光。
(.+\n)+选择所有用户的信息,更具体地说,选择每个字符以结尾的新行多次(所有行)
(?=User)是一个积极的前瞻,可确保我们仅在下一个用户之前选择信息

唯一的是,您必须自己手动用User=Andy删除行。

答案 2 :(得分:0)

ax.csv看起来像...如上所述,并且行保持该顺序

User =安迪
    年龄:12
    重量:45
    ...
    reg.info:12
    用户=山姆
    年龄:10
    重量:65
    ...
    reg.info:11
    用户=克里斯
    年龄:20
    重量:55
    ...
    ...

import re

users = {}
p = []

with open('ax.csv', 'r') as f:
    lines = re.findall(r'User=.*', f.read())
    for l in lines:
        patt = re.findall(r'=(.*)', l)
        p += patt
    f.close()

users = dict([(k, v) for k,v in enumerate(p)])
print('\nUser list ...\n', users)

output:
-------
User list ...  
{0: 'Andy', 1: 'Sam', 2: 'Chris', 3: 'William'}

那么,您是否正在寻找类似的东西?