shutil.copyfile不会复制所有行

时间:2016-11-10 23:54:43

标签: python python-2.7

使用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。但事实并非如此。

2 个答案:

答案 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()