我正在尝试使用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)
答案 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'))
还请注意您提供的代码中函数内容的缩进错误。