Python 如何写入文件的特定行?

Python 如何写入文件的特定行?,python,file,Python,File,假设我有一个文本文件 Line 1 Line 2 Line 3 我通读了一遍,决定把第二行改成第二行。我可以在Python中优雅地实现这一点,而不需要简单地用更改重写文件吗?我试过使用file.seek(),但我没有真正使用它,也不知道它的确切功能。文件是一个字节序列。如果要改变中间需要更多或更少字节来表示的文件,则其余文件需要调整大小。p> 因为文件是存储介质上的物理字节序列,这意味着您需要重写文件的其余部分。换句话说,您需要移动第2行之后的所有内容 实际上,这意味着重写文件,因为这更容易实

假设我有一个文本文件

Line 1
Line 2
Line 3

我通读了一遍,决定把第二行改成第二行。我可以在Python中优雅地实现这一点,而不需要简单地用更改重写文件吗?我试过使用file.seek(),但我没有真正使用它,也不知道它的确切功能。

文件是一个字节序列。如果要改变中间需要更多或更少字节来表示的文件,则其余文件需要调整大小。p> 因为文件是存储介质上的物理字节序列,这意味着您需要重写文件的其余部分。换句话说,您需要移动第2行之后的所有内容


实际上,这意味着重写文件,因为这更容易实现。

文件是一个字节序列。如果要改变中间需要更多或更少字节来表示的文件,则其余文件需要调整大小。p> 因为文件是存储介质上的物理字节序列,这意味着您需要重写文件的其余部分。换句话说,您需要移动第2行之后的所有内容


实际上,这意味着重写文件,因为这更容易实现。

您需要就地编辑功能,而
fileinput
模块提供:

inplace-edit.py:

import sys
import fileinput

for line in fileinput.input(sys.argv[1], inplace=1):
    line = line.rstrip() # Remove the new line
    if line == 'Line 2':
        line = 'Line two'
    print line
data.txt:

Line 1
Line 2
Line 3
Line 1
Line two
Line 3
要运行它,请执行以下操作:

python inplace-edit.py data.txt
生成的data.txt文件:

Line 1
Line two
Line 3

您需要使用
fileinput
模块提供的就地编辑功能:

inplace-edit.py:

import sys
import fileinput

for line in fileinput.input(sys.argv[1], inplace=1):
    line = line.rstrip() # Remove the new line
    if line == 'Line 2':
        line = 'Line two'
    print line
data.txt:

Line 1
Line 2
Line 3
Line 1
Line two
Line 3
要运行它,请执行以下操作:

python inplace-edit.py data.txt
生成的data.txt文件:

Line 1
Line two
Line 3

“我能在Python中优雅地做到这一点,而不只是用更改重写文件吗?”——在任何主流编程语言或操作系统中,如果不重写文件,就无法做到这一点。这根本不是基于流的文件IO的工作方式。如果您想处理记录(例如“文本行”),则需要某种类型的数据库<代码>文件.SeCK()/Cult>只对文件中间的字节进行改写。所以什么文件。查找(偏移)是,它将文件的当前位置设置为“开始在偏移字节中写入”?这几乎是“我可以在Python中优雅地完成,而不需要用修改来重写文件”。-在任何主流编程语言或操作系统中,如果不重写文件,则无法执行此操作。这根本不是基于流的文件IO的工作方式。如果您想处理记录(例如“文本行”),则需要某种类型的数据库<代码>文件.SeCK()/Cult>只对文件中间的字节进行改写。所以什么文件?查找(偏移)是,它将文件的当前位置设置为“开始在偏移字节中写入”吗?这是相当重要的。同时,重要的是要理解硬盘驱动器工作在一个恒定大小的扇区(标准是512字节)。因此,无论你做什么,硬盘上的整个扇区都将被重新写入;从编程语言POV中,您仍然需要根据添加或删除的字节,将更改后的行向上或向下移动。如果文件非常大,并且您正在定期进行修改,您还可以开始将修改写到文件的末尾,一旦有足够的修改,就重写整个文件。这意味着您不必每次都重写整个文件。此外,了解硬盘驱动器使用恒定大小的扇区(标准为512字节)非常重要,因此无论您做什么,硬盘驱动器上的整个扇区都将被重新写入。操作系统会处理这些细节;从编程语言POV中,您仍然需要根据添加或删除的字节,将更改后的行向上或向下移动。如果文件非常大,并且您正在定期进行修改,您还可以开始将修改写到文件的末尾,一旦有足够的修改,就重写整个文件。这意味着您不必每次都重写整个文件。