如何使用python脚本更改多个文本文件

时间:2018-08-17 17:02:47

标签: python python-3.x

我正在尝试使用python脚本更改多个文本文件,但我得到的不是全部,而是一些空文件作为输出。该如何解决?

def tratador_arquivo(arquivo):
with open(arquivo, 'r+',encoding="utf8") as inputtext:
    for ponto in inputtext:
        saida="saida_"+arquivo
        with open(saida, 'w') as saidatemp:
              saidatemp.write(ponto.replace('. ','.\n'))

import os

pasta = os.listdir('/Users/gabri/Desktop/Textos Imóveis')
os.chdir('/Users/gabri/Desktop/Textos Imóveis')

for arquivo in pasta:
    tratador_arquivo(arquivo)

2 个答案:

答案 0 :(得分:2)

看看你的循环:

for ponto in inputtext:
    saida="saida_"+arquivo
    with open(saida, 'w') as saidatemp:
          saidatemp.write(ponto.replace('. ','.\n'))

一次又一次地重新打开同一文件,对输入文件的每一行一次。由于您以w模式打开文件,因此该文件将被截断,擦除您以前在其中写入的所有内容,并仅用(转换后的)最新行替换它。因此,在循环结束时,您的输出文件只有输入文件的最后一行(已转换)。

这可能总是 错误(尽管很难确定的是,当我不确定您到底想做什么的时候)。但是,在输入文件以空行结尾的情况下,这显然是错误的,因为输出文件中唯一的东西就是空行。

您可能想做的是这样:

saida="saida_"+arquivo
with open(saida, 'w') as saidatemp:
    for ponto in inputtext:
        saidatemp.write(ponto.replace('. ','.\n'))

换句话说,只需打开文件一次,并继续向其中写新行。

答案 1 :(得分:1)

扩展abarnert的答案,您可能会获得完整的代码,如下所示:

def tratador_arquivo(arquivo):
    saida = "saida_" + arquivo
    with open(arquivo, 'r+',encoding="utf8") as inputtext, open(saida, 'w') as saidatemp:
        for ponto in inputtext:
            saidatemp.write(ponto.replace('. ', '.\n'))

还请注意您提供的代码中函数内容的缩进错误。