CSV 文件中的正则表达式搜索和替换值
Regular expression search and substitute values in CSV file
我想查找 CSV 文件中的所有管理职位并将其替换为编号 3。该列表包含不同的职位,从简单的“经理”到“施工项目经理和项目主管”,但所有它们放在两个逗号之间。我写这篇文章是为了找到它们:
[,\s]?([A-Za-z. '\s/()\"]+)?(Manager|manager)([A-Za-z. '\s/()]+)?,
问题是有时两个相邻的管理职位之间通常有一个逗号。所以当我想找到位置时我需要包含逗号,但当我想用 3 替换位置时我需要排除它!我如何使用 Python 中的正则表达式来做到这一点?
这里是 CSV file.
我建议改用 Python 的内置 CSV 模块。让我们不要在这里重新发明轮子,而是考虑将 CSV 处理为一个已解决的问题。
下面是一些示例代码,演示了如何完成:csv 模块负责 reading and writing 具有正确分隔符和引号字符的文件。
re.search 用于搜索个人 cells/columns 您的关键字。如果找到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 库方法。
我想查找 CSV 文件中的所有管理职位并将其替换为编号 3。该列表包含不同的职位,从简单的“经理”到“施工项目经理和项目主管”,但所有它们放在两个逗号之间。我写这篇文章是为了找到它们:
[,\s]?([A-Za-z. '\s/()\"]+)?(Manager|manager)([A-Za-z. '\s/()]+)?,
问题是有时两个相邻的管理职位之间通常有一个逗号。所以当我想找到位置时我需要包含逗号,但当我想用 3 替换位置时我需要排除它!我如何使用 Python 中的正则表达式来做到这一点?
这里是 CSV file.
我建议改用 Python 的内置 CSV 模块。让我们不要在这里重新发明轮子,而是考虑将 CSV 处理为一个已解决的问题。
下面是一些示例代码,演示了如何完成:csv 模块负责 reading and writing 具有正确分隔符和引号字符的文件。
re.search 用于搜索个人 cells/columns 您的关键字。如果找到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 库方法。