我编写了一个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.append("[{0}]: ".format(num) + line)
with open(filename + "_lined" + ".txt", "a+") as f:
for line in new_text:
f.write(line)
为了测试它,我在一批文本文件上运行它,然后,出于好奇,再次运行它(在已编号的文件中添加第二个设置的行号)。我注意到每次运行程序时,新创建的文件的文件大小都要比每行添加5-6个字符要大得多。文件大小从150 KB(原始)跳到700,1800,然后每次后续运行3000 KB。
导致文件大小增加的原因是什么?
答案 0 :(得分:2)
在第9行中,使用“a +”标志打开文件。这使文件可用于追加和读取。有关open命令的不同模式的说明,请参阅here。通过以“w”模式打开文件,您将覆盖现有文件。
答案 1 :(得分:1)
正如所指出的,在评论中,每次运行代码时都会附加到带衬里的版本。而是尝试:
def create_lined_ver(filename):
with open(filename + ".txt", "r") as f:
text = f.readlines()
new_text = ["[{0}]: ".format(num) + line for (num, line) in enumerate(text)]
with open(filename + "_lined" + ".txt", "w") as f:
f.write(''.join([new_text]))
答案 2 :(得分:1)
我认为您不需要使用列表或附加到文件。
你正在寻找这样的东西。
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))