[英]Search and replace multiple string in python
这是我的代码,我想搜索并替换三个字符串
tmp="/tmp"
day = datetime.date.today().day
today = datetime.date.today()
year =datetime.date.today().year
month = today.strftime('%b')
f1 = open("%s/backup.txt" % (tmp), 'r')
f2 = open("%s/backup1.txt" % (tmp), 'w')
for line in f1:
f2.write(line.replace('day', "%s" % (day)))
f1.close()
f2.close()
f1 = open("%s/backup1.txt" % (tmp), 'r')
f2 = open("%s/backup2.txt" % (tmp), 'w')
for line in f1:
f2.write(line.replace('mon', "%s" % (mon)))
f1.close()
f2.close()
f1 = open("%s/backup2.txt" % (tmp), 'r')
f2 = open("%s/backup3.txt" % (tmp), 'w')
for line in f1:
f2.write(line.replace('year', "%s" % (year)))
f1.close()
f2.close()
无论如何一次完成并通过降低LOC来做到这一点?
我想一次性查找和替换年,周一和日。
您可以在将循环写入新文件之前 ,在同一循环中进行三个替换。
f1 = open("%s/backup.txt" % (tmp), 'r')
f2 = open("%s/backup1.txt" % (tmp), 'w')
for line in f1:
new_line = line.replace('day', "%s" % (day))
new_line = line.replace('mon', "%s" % (mon))
new_line = line.replace('year', "%s" % (year))
f2.write(new_line)
f1.close()
f2.close()
如果愿意,您甚至可以在同一行上执行所有这三个操作,尽管该行会很长,并且无论如何都应该用\\
断开。 另外,您可以(并且应该) with
一起使用以打开和关闭文件。
with open("%s/backup.txt" % tmp, 'r') as f1, \
open("%s/backup1.txt" % tmp, 'w') as f2:
for line in f1:
new_line = line.replace('day', "%s" % day) \
.replace('mon', "%s" % mon) \
.replace('year', "%s" % year)
f2.write(new_line)
以@bruno的想法为基础 ,您还可以创建带有替换内容的字典,然后使用正则表达式查找“ day”或“ mon”或“ year” "day|mon|year"
,并将其替换为字典中的值。
>>> day, mon, year = 2017, 5, 15
>>> repl = {"day": day, "mon": mon, "year": year}
>>> line = "test string with day, mon, and year in it"
>>> re.sub("day|mon|year", lambda m: str(repl.get(m.group())), line)
'test string with 2017, 5, and 15 in it'
更好的是:如果您可以控制模板文件,则可以将要替换的部分包装到{...}
,然后使用str.format
进行替换(假设{...}
不会出现在文件)。
>>> line = "test string with {day}, {mon}, and {year} in it"
>>> line.format(**repl)
'test string with 2017, 5, and 15 in it'
tmp="/tmp"
today = datetime.date.today()
day = "%s" % today.day
year = "%s" % today.year
month = today.strftime('%b')
replacements = [
# find -> replace
('day', day),
('mon', mon),
('year', year)
]
with open("%s/backup.txt" % (tmp), 'r') as source, \
open("%s/backup1.txt" % (tmp), 'w') as dest:
for line in source:
for target, replacement in replacements:
line = line.replace(target, replacement)
dest.write(line)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.