如果遇到 Python,如何仅从文本文件中删除第一行

How to delete only first line from text file if somecodition is met with Python

我正在尝试通过在文本文件底部附加新代理来不断更新具有最新数据(活动代理 IP 和端口)的文件,我想删除第一行(它将是基本上就像从下向上滚动所有可用的最新代理 ips)。 计算行数并附加最新的代理这不是问题并且代码有效,但是我无法仅删除第一行而不删除(覆盖整个文本文件)

这是我的代码:

proxy_list = ['proxy1','proxy2','proxy3','etc','etc'] # List of tested proxy
for proxy in proxy_list:
    number_of_lines_in_file = sum(1 for line in open('proxies.txt'))
    if number_of_lines_in_file >= 30:
        with open('proxies.txt', 'w',encoding='utf-8') as update_new_proxies_file:
            for index, line in enumerate(proxy.strip()):
                if index == 1:
                    update_new_proxies_file.write(proxy)

但是 deletes/overwrite 整个文本文件。

有没有办法只删除第一行而不删除下面的所有其他内容?

需要先读取文件,除第一行外重新写回文件

with open('proxies.txt', 'r+', encoding='utf-8') as update_new_proxies_file:
    data = update_new_proxies_file.read().splitlines(True)
    update_new_proxies_file.truncate(0)
    update_new_proxies_file.writelines(data[1:])

由于文件在内存中的结构,通常不可能在不重写整个文件的情况下在开头截断文件。在大多数文件系统中,一个文件由一个大小和可变数量的固定大小(比如 4096 字节)的块组成。文件的第一个字节必须位于其中一个块的开头。如果删除第一行仅删除 20 个字节,则其他字节必须移动到块的开头,并且所有其他块的数据也必须移动。

相比之下,在末尾截断很容易。只需删除不再属于文件的所有块并更改文件的大小。无需复制。

这可能就是文件系统驱动程序只支持末尾截断的原因。在开始时截断对于在简单的系统调用中执行它来说可能是一种扩展方式。您唯一可以做的就是逐行读取文件,跳过第一行并将所有其他行写入临时文件。最后用临时文件替换原文件