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())