使用cloneTemp.txt
时,我的临时输出文件shutil.copyfile()
中缺少77行。
这是为什么?
此文件包含两个功能。第一个函数创建一个临时文件,该文件将包含由我的 newFileLocation
Main.py
的文件生成的数据
import os
import sys
import shutil
def cloneTemp(newFileLocation):
cloneFile = open('cloneTemp.txt', 'w+')
shutil.copyfile(newFileLocation, 'cloneTemp.txt')
然后第二个函数将新行发送到cloneTemp.txt
的开头,将数据从newFileLocation复制到cloneTemp.txt,最后写入cloneTemp.txt的末尾:
def gridEnable(newFileLocation):
if(x < 200):
print x
cloneTemp.write(x)
else:
cloneTemp.write(y)
shutil.copyfile('cloneTemp.txt', newFileLocation)
然而,当它被复制时缺少线条。为什么newFileLocation
没有全部复制?
修改
newFileLocation
是一个包含Main.py
输出的文件,即全部。由于我无法预先添加到newFileLocation
的开头,因此我创建了一个名为newFileLocation
cloneTemp.txt
的临时文件,仅在之后复制数据已经将线条添加到我需要的空cloneTemp.txt
中。添加这些行后,shutil.copyfile()
应将newFileLocation
全部复制到cloneTemp.txt
。但事实并非如此。
答案 0 :(得分:1)
我仍然对你想要的东西感到困惑,但这是一个稻草人的回答。此代码将采用newFileLocation
中的文件,并将数据添加到文件的正面和背面。
with open('cloneTemp.txt', 'w') as tmp:
tmp.write(x)
with open(newFileLocation) as newfile:
shutil.copyfileobj(newfile, tmp)
tmp.write(y)
os.rename('cloneTemp.txt', newFileLocation)
所以,试试吧
import shutil
import os
# file to test
newFileLocation = 'testfile.txt'
open(newFileLocation, 'w').write('this\nis\na\ntest\n')
print('before:')
print(open(newFileLocation).read())
with open('cloneTemp.txt', 'w') as tmp:
tmp.write('header\n')
with open(newFileLocation) as newfile:
shutil.copyfileobj(newfile, tmp)
tmp.write('footer\n')
os.rename('cloneTemp.txt', newFileLocation)
print('after:')
print(open(newFileLocation).read())
可生产
before:
this
is
a
test
after:
header
this
is
a
test
footer
答案 1 :(得分:0)
大多数文件I / O都是缓冲的。这意味着当您向该文件写入信息时,其中一些信息不会立即到达磁盘;它保留在程序中的缓冲区中,直到收集到足够的值才能写出来。
为安全起见,您应该在复制之前关闭该文件:
newFile.close()