Python写入文件后如何正确统计文件行数?
文件写入后行数统计未更新的解决方法
问题原因
你代码里的lines变量是在写入新内容之前计算的,而且调用fl.readlines()后,文件指针会移动到文件末尾,后续写入的内容不会被之前的len(fl.readlines())捕获,所以输出的是初始的行数1。
解决方法
方法1:写入后重置文件指针,重新统计
修改代码,在写入后将文件指针移回文件开头,重新读取统计行数:
fl = open('example.txt', 'r+') # 统计初始行数 lines = len(fl.readlines()) fl.write('string2\n') # 将文件指针移到文件起始位置 fl.seek(0) # 重新读取并统计更新后的行数 updated_lines = len(fl.readlines()) print(updated_lines) fl.close()
方法2:拆分读写操作,用上下文管理器更安全
推荐用with语句(上下文管理器)处理文件,避免忘记关闭文件,同时分开读写操作:
# 读取初始行数 with open('example.txt', 'r') as f: initial_lines = len(f.readlines()) # 追加写入新内容 with open('example.txt', 'a') as f: f.write('string2\n') # 重新读取更新后的行数 with open('example.txt', 'r') as f: updated_lines = len(f.readlines()) print(updated_lines)
补充说明
r+模式是读写模式,文件指针初始在开头,但readlines()会一次性读取所有内容,把指针移到末尾。seek(0)是将文件指针重置到文件开头,这样后续的readlines()才能读取到包括新写入内容在内的所有行。- 用
with语句会自动关闭文件,比手动调用close()更安全可靠。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

