Python:创建文本文件,写入它,替换字符串

时间:2017-11-14 17:35:15

标签: python string text replace io

我正在创建一个文件,写入它,然后我想替换一个字符串。我有一切工作,除了替换。我试过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

感谢。

6 个答案:

答案 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)

在编辑文本之前,您正在写入文件。

你应该打开,编辑,然后写。