如何更改 Python 中文件的第一行?

How to Change First Line of File in Python?

为什么 Python-2.7 on Windows 会截断文件?这个问题在 shutil.copyfile 中是众所周知的,但我不知道在更改第一行时如何避免它。文件大小未知,可能很大。

下面的参考,但我更喜欢使用类似以下代码的更好的异常处理:

import os
import sys
import shutil

with open(sys.argv[1], 'r+') as src:
    line = src.readline()
    with open(sys.argv[1], 'r+') as dst:
        dst.write = sys.argv[1]+'\n'
        shutil.copyfileobj(src, dst)

参考:change first line of a file in python

您需要将文件的新版本创建为 NamedTemporaryFile。完成构建后,您可以在旧文件之上重命名它。

代码:

def insert_line_front(insert_filename, to_insert):

    with open(insert_filename) as src, tempfile.NamedTemporaryFile(
            'w', dir=os.path.dirname(insert_filename), delete=False) as dst:

        # Discard first line
        src.readline()

        # Save the new first line
        dst.write(to_insert + '\n')

        # Copy the rest of the file
        shutil.copyfileobj(src, dst)

    # remove old version
    os.unlink(insert_filename)

    # rename new version
    os.rename(dst.name, insert_filename)

    return()

测试代码:

import os
import shutil
import sys
import tempfile

# For noob - Function code goes here

filename = os.path.abspath(sys.argv[1])
insert_line_front(filename, filename)

之前:

/testcode/file1
"-3.588920831680E-02","1.601887196302E-01","1.302309112549E+02"
"3.739478886127E-01","1.782759875059E-01","6.490543365479E+01"
"3.298096954823E-01","6.939357519150E-02","2.112392578125E+02"
"-2.319437451661E-02","1.149862855673E-01","2.712340698242E+0

之后:

/testcode/file2
"-3.588920831680E-02","1.601887196302E-01","1.302309112549E+02"
"3.739478886127E-01","1.782759875059E-01","6.490543365479E+01"
"3.298096954823E-01","6.939357519150E-02","2.112392578125E+02"
"-2.319437451661E-02","1.149862855673E-01","2.712340698242E+0