如何在Python中更改文件的第一行?
为什么Windows上的Python-2.7会截断文件?这个问题在如何在Python中更改文件的第一行?,python,python-2.7,shutil,Python,Python 2.7,Shutil,为什么Windows上的Python-2.7会截断文件?这个问题在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 ds
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)
参考:您需要将文件的新版本创建为。构建完成后,可以在旧文件的顶部重命名它 代码: 测试代码: 之前: 之后:
无论是Windows、Linux、OSX、Python还是其他版本,打开文件进行写入总是会截断文件。在您的情况下,唯一的选择是创建一个新文件,在其中写入第一行新行,然后将原始文件复制到新文件的末尾(文件必须有不同的名称)。您必须以类似
w+
的模式打开。确保新的第一行与原始行的长度完全相同(如果较短,则保留部分旧行;如果较长,则覆盖部分第二行)。
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