我有一个看起来像这样的CSV文件
a,b,c
d1,g4,4m
t,35,6y
mm,5,m
我试图用“月份”替换所有m和y之后的数字'和'年'分别。我使用以下脚本。
import re,csv
out = open ("out.csv", "wb")
file = "in.csv"
with open(file, 'r') as f:
reader = csv.reader(f)
for ss in reader:
s = str(ss)
month_pair = (re.compile('(\d\s*)m'), 'months')
year_pair = (re.compile('(\d\s*)y'), 'years')
def substitute(s, pairs):
for (pattern, substitution) in pairs:
match = pattern.search(s)
if match:
s = pattern.sub(match.group(1)+substitution, s)
return s
pairs = [month_pair, year_pair]
print (substitute(s, pairs))
它确实替换但它只在最后一行上执行,忽略它之前的行。如何让它迭代所有行并写入另一个csv文件?
答案 0 :(得分:1)
您可以使用正面look-behind:
>>> re.sub(r'(?<=\d)m','months',s)
'a,b,c\nd1,g4,4months\nt,35,6y\nmm,5,m'
>>> re.sub(r'(?<=\d)y','years',s)
'a,b,c\nd1,g4,4m\nt,35,6years\nmm,5,m'
答案 1 :(得分:1)
在这一行
print (substitute(s, pairs))
您的变量s
只是文件中的最后一行。请注意如何将文件读取中的s
更新为当前行。
解决方案(选择一个):
for
- 循环迭代所有行。for
- 循环中,您可以在其中读取文件的行。这绝对是更好的解决方案!您可以轻松查找如何编写新文件或更改正在处理的文件。