我想在CSV文件中查找并替换所有编号为3的管理职位。该列表包含从简单的“,Manager”到“,Construction Project Manager and Project Superintendent”的不同职位,但是所有这些都是放在两个逗号之间。我写这篇文章是为了找到所有的人:
[,\s]?([A-Za-z. '\s/()\"]+)?(Manager|manager)([A-Za-z. '\s/()]+)?,
问题在于,两个相邻的Managrial位置之间有时会出现逗号。因此,当我想查找职位时需要添加逗号,但是当我想用3替换职位时就需要排除逗号!我该如何在Python中使用正则表达式呢?
这里是CSV file。
答案 0 :(得分:1)
我建议改为使用Python的内置CSV模块。我们不要在这里重新发明轮子,而考虑将CSV处理为已解决的问题。
以下是一些示例代码,演示了如何实现:csv模块使用正确的定界符和引号char负责reading and writing文件。
re.search用于在单个单元格/列中搜索您的关键字。如果找到manager
,则放置3,否则,放置原始内容并在完成后写回行。
import csv, sys, re
infile= r'in.csv'
outfile= r'out.csv'
o = open(outfile, 'w', newline='')
csvwri = csv.writer(o, delimiter=',', quotechar='\"', quoting=csv.QUOTE_MINIMAL)
with open(infile, newline='') as f:
reader = csv.reader(f, delimiter=',', quotechar='\"', quoting=csv.QUOTE_MINIMAL)
try:
for row in reader:
newrow = []
for col in row:
if re.search("manager", col, re.I):
newrow.append("3")
else:
newrow.append(col)
csvwri.writerow(newrow)
except csv.Error as e:
sys.exit('file {}, line {}: {}'.format(infile, reader.line_num, e))
o.flush()
o.close()
我想说的很简洁。
如果您坚持使用正则表达式,则可以使用以下改进的模式:
[,\s]?([A-Za-z. '\s/()\"]+)?(Manager|manager)([A-Za-z. '\s/()]+)?(?=,)
用3代替,如demo所示。
但是,我相信您使用csv lib方法仍然会更好。