Python处理并覆盖外部文本文件[重复]
Posted
技术标签:
【中文标题】Python处理并覆盖外部文本文件[重复]【英文标题】:Python process and overwrite external text file [duplicate] 【发布时间】:2019-12-17 02:55:13 【问题描述】:我有一个输入文本文件如下,这个保存为12.txt:
[(442, 165), (442, 184), (487, 165), (487, 184)],english
我的目标是从这个文件中删除所有特殊字符并覆盖它:我正在使用下面的 python 脚本 :
import os
import numpy as np
import math
import cv2 as cv
#path = '/media/D/code/OCR/text-detection-ctpn/data/mlt_english+chinese/image'
gt_file = '12.txt'
with open(gt_file, 'r+') as f:
for line in f.readlines():
line = line.replace("[", "")
line = line.replace("(", "")
line = line.replace(")", "")
line = line.replace("]", "")
line = line.replace(" ", "")
f.write(line)
但是它给了我这个输出:
[(234, 162), (234, 183), (307, 162), (307, 183)],english 234,162,234,183,307,162,307,183,english
我不希望像上面显示的那样附加输出我希望输出覆盖 12.txt。运行 python 脚本后的 12.txt 文件应如下所示:
234,162,234,183,307,162,307,183,english
我已经推荐了Python replace and overwrite instead of appending,但我缺少一些东西
【问题讨论】:
打开文件时是否使用'w+'而不是'r+'作为选项不起作用? @TUIloverw+
截断文件,因此 OP 将无法读取数据。
【参考方案1】:
我用过这个
file = open('test_file', 'r')
data = file.read()
file.close()
data = data.replace("[", "")
data = data.replace("(", "")
data = data.replace(")", "")
data = data.replace("]", "")
data = data.replace(" ", "")
print(data, file=open('test', 'w'))
检查这是否适合您。
【讨论】:
【参考方案2】:原因是,你的文件指针已经到了末尾。给定文本文件中的一行,seek() 和 truncate() 函数可用于重现您需要的结果。
import os
import numpy as np
import math
gt_file = '12.txt'
with open(gt_file, 'r+') as f:
for line in f.readlines():
line = line.replace("[", "")
line = line.replace("(", "")
line = line.replace(")", "")
line = line.replace("]", "")
line = line.replace(" ", "")
f.seek(0)
f.truncate()
f.write(line)
【讨论】:
【参考方案3】:您需要打开临时文件并从文件中读取,删除旧文件并重命名为新名称
import os
import numpy as np
import math
import cv2 as cv
#path = '/media/D/code/OCR/text-detection-ctpn/data/mlt_english+chinese/image'
gt_file = '12.txt'
output = open("temp.txt","w")
with open(gt_file, 'r') as f:
for line in f:
line = line.replace("[", "")
line = line.replace("(", "")
line = line.replace(")", "")
line = line.replace("]", "")
line = line.replace(" ", "")
output.write(line)
output.close()
os.remove(gt_file) # remove old file
os.rename("temp.txt",gt_file) # rename as old file
【讨论】:
【参考方案4】:把两个进程分开,这样更干净。
#read and edit lines
to_write = [] #store edited lines
with open(gt_file, 'r') as f:
for line in f.readlines():
...
to_write.append(line)
#write back edited lines
with open(gt_file, 'w') as f:
for line in to_write:
f.write(line)
【讨论】:
以上是关于Python处理并覆盖外部文本文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Python:忽略文本文件的注释,该文本文件被解析为字典以写入 CSV [重复]
text 逐行读取文本文件并重复处理直到最后一行的示例。 #SenseTalk