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

2024-10-04 11:29:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用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)

Tags: inforosaswithopenuserspasta
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'))

换言之,只需打开一次文件,并不断向其写入新行。你知道吗

展开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'))

还要注意您提供的代码中函数内容的缩进错误。你知道吗

相关问题 更多 >