我正在创建一个文件,写入它,然后我想替换一个字符串。我有一切工作,除了替换。我试过re.sub,str.replace等等。我无法弄明白。
target_string = 'foo4bar44foobar444foobar, foo4bar'
file = open(source_file, "w+")
file.write(target_string)
target_string = re.sub('4', '55', target_string)
Desired Output: foo55bar5555foobar555555foobar, foo55bar
感谢。
答案 0 :(得分:2)
尝试此操作,在编写目标字符串之前执行替换并关闭文件:
target_string = 'foo4bar44foobar444foobar, foo4bar'
file = open(source_file,"w")
target_string= re.sub('4', '55', target_string)
file.write(target_string)
file.close()
OR
target_string = 'foo4bar44foobar444foobar, foo4bar'
with open(source_file,"w") as f:
target_string = re.sub('4', '55', target_string)
f.write(target_string)
答案 1 :(得分:1)
您需要在写入文件之前更改字符串。
切换最后两行。
答案 2 :(得分:1)
你可以试试这个:
target_string = 'foo4bar44foobar444foobar, foo4bar'
final_string = ''
seen_val = False
for i in target_string:
if i.isdigit():
if seen_val:
final_string += str(int(i)+1)*2
else:
final_string += str(int(i)+1)*2
seen_val = True
else:
final_string += i
seen_val = False
输出:
'foo55bar5555foobar555555foobar, foo55bar'
答案 3 :(得分:1)
您遇到错误的官方术语是sequencing
的 code
。
在对target_string
进行操作之前,先将re.sub
写入您的文件!您需要切换这些操作,以便将修改后的write
string
改为file
:
target_string = 'foo4bar44foobar444foobar, foo4bar'
file = open(source_file, "w+")
target_string = re.sub('4', '55', target_string)
file.write(target_string)
另外,当您使用files
时,理想情况下应使用with
语句,就像程序在调用error
之前抛出file.close()
一样(我假设你以后会这样做,你会遇到问题。
因此,您的最终code
应该类似于:
target_string = 'foo4bar44foobar444foobar, foo4bar'
with open(source_file, "w+") as f:
target_string = re.sub('4', '55', target_string) #could be moved out of with
file.write(target_string)
答案 4 :(得分:1)
这里(也是文本文件的奖金备份):P
import fileinput
# CREATE / WRITE
f = open("test.txt","w+")
f.write("foo4bar44foobar444foobar, foo4bar")
f.close()
# REPLACE
with fileinput.FileInput("test.txt", inplace=True, backup='.bak') as file:
for line in file:
print(line.replace("4", "55"), end='')
如果您不需要比较备份文件,只需从backup='.bak'
fileinput.FileInput
答案 5 :(得分:1)
在编辑文本之前,您正在写入文件。
你应该打开,编辑,然后写。