python 文件如何删除最后一行
python file how to delete the last line
我有一个文件包含:
Line_1
Line_2
Line_3
Line_4
我想在打开文件时删除文件 Line_4
的最后一行,而不是使用 python 列表方法,如下所示:
with open('file.txt', 'r+') as f:
lines = f.readlines()
if len(lines) > 3:
f.seek(0)
for i in lines:
if i != 4:
f.write(i)
f.truncate()
以上解决方案无效。我也使用了 os.SEEK_END
如下:
with open('file.txt', 'r+') as f:
lines = f.readlines()
if len(lines) > 3:
f.seek(0, os.SEEK_END)
f.truncate()
但是,效果不佳!
你可以这样做,使用 read().splitlines()
file_name = "file.txt"
data = open(file_name).read().splitlines()
with open(file_name, "w") as fh:
for idx, line in enumerate(data):
if idx >= 3:
break
fh.write(f"{line}\n")
如果您只想删除最后一行,您可以输入:if idx >= len(data) - 1:
去掉最后一行的最有效方法是使用带有 'head' 命令的子进程模块来去掉最后一行:
输入:
Line_1
Line_2
Line_3
Line_4
代码:
import subprocess
filename = 'file.txt'
line = subprocess.check_output(['head', '-n', '-1', filename])
line = line.decode('utf-8')
print(line)
输出:
Line_1
Line_2
Line_3
基本上,如果您想使用 .truncate()
从文件中删除最后一行,您可以在检索下一行之前保存之前的位置,并在到达文件末尾后使用此位置调用 .truncate()
:
with open("file.txt", "r+") as f:
current_position = previous_position = f.tell()
while f.readline():
previous_position = current_position
current_position = f.tell()
f.truncate(previous_position)
如果您只需要删除特定索引后的所有行,您只需检索新行的次数并在当前位置调用 .truncate()
:
index = 4
with open("file.txt", "r+") as f:
for _ in range(index - 1):
if not f.readline():
break
f.truncate(f.tell())
或更短:
lines_to_keep = 3
with open("file.txt", "r+") as f:
while lines_to_keep and f.readline():
lines_to_keep -= 1
f.truncate(f.tell())
我有一个文件包含:
Line_1
Line_2
Line_3
Line_4
我想在打开文件时删除文件 Line_4
的最后一行,而不是使用 python 列表方法,如下所示:
with open('file.txt', 'r+') as f:
lines = f.readlines()
if len(lines) > 3:
f.seek(0)
for i in lines:
if i != 4:
f.write(i)
f.truncate()
以上解决方案无效。我也使用了 os.SEEK_END
如下:
with open('file.txt', 'r+') as f:
lines = f.readlines()
if len(lines) > 3:
f.seek(0, os.SEEK_END)
f.truncate()
但是,效果不佳!
你可以这样做,使用 read().splitlines()
file_name = "file.txt"
data = open(file_name).read().splitlines()
with open(file_name, "w") as fh:
for idx, line in enumerate(data):
if idx >= 3:
break
fh.write(f"{line}\n")
如果您只想删除最后一行,您可以输入:if idx >= len(data) - 1:
去掉最后一行的最有效方法是使用带有 'head' 命令的子进程模块来去掉最后一行:
输入:
Line_1
Line_2
Line_3
Line_4
代码:
import subprocess
filename = 'file.txt'
line = subprocess.check_output(['head', '-n', '-1', filename])
line = line.decode('utf-8')
print(line)
输出:
Line_1
Line_2
Line_3
基本上,如果您想使用 .truncate()
从文件中删除最后一行,您可以在检索下一行之前保存之前的位置,并在到达文件末尾后使用此位置调用 .truncate()
:
with open("file.txt", "r+") as f:
current_position = previous_position = f.tell()
while f.readline():
previous_position = current_position
current_position = f.tell()
f.truncate(previous_position)
如果您只需要删除特定索引后的所有行,您只需检索新行的次数并在当前位置调用 .truncate()
:
index = 4
with open("file.txt", "r+") as f:
for _ in range(index - 1):
if not f.readline():
break
f.truncate(f.tell())
或更短:
lines_to_keep = 3
with open("file.txt", "r+") as f:
while lines_to_keep and f.readline():
lines_to_keep -= 1
f.truncate(f.tell())