Python 是什么导致我的代码增大了文本文件的大小?
我已经编写了一个Python程序来遍历目录中的文本文件,并使用添加的行号创建每个文件的新版本。以下是程序中的相关功能:Python 是什么导致我的代码增大了文本文件的大小?,python,Python,我已经编写了一个Python程序来遍历目录中的文本文件,并使用添加的行号创建每个文件的新版本。以下是程序中的相关功能: def create_lined_ver(filename): new_text = [] with open(filename + ".txt", "r+") as f: text = f.readlines() for (num, line) in enumerate(text): new_text.
def create_lined_ver(filename):
new_text = []
with open(filename + ".txt", "r+") as f:
text = f.readlines()
for (num, line) in enumerate(text):
new_text.append("[{0}]: ".format(num) + line)
with open(filename + "_lined" + ".txt", "a+") as f:
for line in new_text:
f.write(line)
为了测试它,我在一批文本文件上运行它,然后出于好奇,再次运行它(在已经编号的文件中添加第二组行号)。我注意到,每次运行该程序时,新创建的文件的文件大小都比每行添加5-6个字符时的大小大得多。每次后续运行时,文件大小从150KB(原始)跳到7001800,然后再跳到3000KB
是什么导致文件大小增加如此之多?正如在注释中指出的那样,每次运行代码时,您都会附加到行版本。相反,请尝试:
def创建版本(文件名):
将open(filename+“.txt”,“r”)作为f:
text=f.readlines()
new_text=[“[{0}]:”。格式(num)+枚举(text)中(num,line)的行]
将open(filename+“_-lined”+“.txt”、“w”)作为f:
f、 写入(“”.join([new_text]))
如前所述,在注释中,每次运行代码时都会附加到行版本。相反,请尝试:
def创建版本(文件名):
将open(filename+“.txt”,“r”)作为f:
text=f.readlines()
new_text=[“[{0}]:”。格式(num)+枚举(text)中(num,line)的行]
将open(filename+“_-lined”+“.txt”、“w”)作为f:
f、 写入(“”.join([new_text]))
在第9行,您打开带有“a+”标志的文件。这使文件可用于附加和读取。有关open命令不同模式的说明,请参见。通过以“w”模式打开文件,您将覆盖现有文件。在第9行,您将使用“a+”标志打开文件。这使文件可用于附加和读取。有关open命令不同模式的说明,请参见。通过以“w”模式打开文件,您将覆盖现有文件。我认为您不需要使用列表或附加到文件
你在找这样的东西
def create_lined_ver(filename):
with open(filename + ".txt") as f_in, open(filename + " _lined.txt", "w") as f_out:
for num, line in enumerate(f_in):
f_out.write("[{}]: {}\n".format(num, line))
我认为您不需要使用列表或附加到文件 你在找这样的东西
def create_lined_ver(filename):
with open(filename + ".txt") as f_in, open(filename + " _lined.txt", "w") as f_out:
for num, line in enumerate(f_in):
f_out.write("[{}]: {}\n".format(num, line))
看起来您已经在append模式下打开了文件,您是否查看了文件的内容…?“在程序运行之前没有现有的目标文件”--在第二次和所有后续运行中都有@DavidConrad等等,你完全正确。但是
file.txt
也是从file.txt
附加的!看起来您已经在append模式下打开了文件,您是否查看了文件的内容…?“在程序运行之前没有现有的目标文件”--在第二次和所有后续运行中都有@DavidConrad等等,你完全正确。但是file.txt
也是从file.txt
附加的!这真是太美了。我甚至不知道可以同时打开多个上下文管理器,或者直接枚举文件句柄对象。我相信你的意思是积极的Pythonic;)这真是太美了。我甚至不知道可以同时打开多个上下文管理器,或者直接枚举文件句柄对象。我相信你的意思是积极的Pythonic;)