【问题标题】:Python process and overwrite external text file [duplicate]Python处理并覆盖外部文本文件[重复]
【发布时间】: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+'作为选项不起作用?
  • @TUIlover w+ 截断文件,因此 OP 将无法读取数据。

标签: python


【解决方案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)
        

        【讨论】:

          猜你喜欢
          • 2021-09-18
          • 1970-01-01
          • 1970-01-01
          • 2013-05-11
          • 2016-07-17
          • 2023-03-11
          • 1970-01-01
          • 2013-06-06
          • 2019-03-24
          相关资源
          最近更新 更多