问题描述
如何使用(如果存在)字符串占位符在文本文件中进行写入? 我想编写一个文本文件,该文件跟踪自身写入了多少行。一旦行数更改,计数应相应更改。
这里是一个例子:
number_of_lines = 0
with open('./test.txt',"w") as out_file:
out_file.write('number of elements in list: '+str(2)+'\n')
out_file.write('element 1\n')
out_file.write('element 2\n')
with open('./test.txt',"r+") as out_file:
next(out_file)
out_file.write('element 3\n')
out_file.write('element 4\n')
out_file.write('element 5\n')
out_file.write('element 6\n')
out_file.write('element 7\n')
out_file.write('element 8\n')
out_file.write('element 9\n')
out_file.write('element 10\n') # Now 2 Digits '10'
out_file.seek(0)
for i in out_file:
number_of_lines += 1
out_file.seek(0)
out_file.write('number of elements in list: '+str(number_of_lines-1)+'\n')
文本文件:
number of elements in list: 10
lement 1
element 2
element 3
element 4
element 5
element 6
element 7
element 8
element 9
element 10
解决方法
由于.txt
文件本身无法读取,因此您尝试执行的棘手部分是仅更新文件中的特定行,同时保留其余数据 。 here的更多内容。
因此,一个简单的解决方案是定义一个函数来更新相关行,然后在我们对该文件进行每次修改后调用它。让我们做到这一点:
def update_line_count(filename):
with open(filename,'r') as original:
# Get the original file data so we can re-insert it later
data = original.read()
with open(filename,'w') as modified:
# Remove the first line if it's already a line count
if data.startswith('number of elements in list'):
data = '\n'.join(data.split('\n')[1:])
# Get the updated line count
number_of_lines = len(data.split('\n'))-1
updated = f'number of elements in list: {number_of_lines}\n{data}'
modified.write(updated)
现在,我们可以在修改文件后立即调用它,它将更新第一行以包含正确的行数。
让我们看看它的作用:
my_file = './test.txt'
with open(my_file,"w") as file:
file.write('element 1\n')
file.write('element 2\n')
update_line_count(my_file)
现在,在test.txt
内,我们有:
number of elements in list: 2
element 1
element 2
让我们修改和更新更多内容:
with open(my_file,"r+") as file:
next(file)
file.write('element 3\n')
file.write('element 4\n')
file.write('element 5\n')
file.write('element 6\n')
file.write('element 7\n')
file.write('element 8\n')
file.write('element 9\n')
file.write('element 10\n')
file.write('element 100\n')
file.write('element 1000?\n')
update_line_count(my_file)
浏览test.txt
内:
number of elements in list: 12
element 1
element 2
element 3
element 4
element 5
element 6
element 7
element 8
element 9
element 10
element 100
element 1000?
万岁! :)