我正在尝试整理一个大的文本文件,其中包含用户和有关他们的信息。任务是从特定用户清除此文本,删除用户以及下面的有关该用户的所有信息。
文件示例:
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"
现在如何删除该用户下方的所有行,而有关下一个用户的信息尚未开始?
答案 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'}
那么,您是否正在寻找类似的东西?