0

我需要连接两个文件,一个包含一个数字,另一个包含至少两行数据。我已经尝试过 shutil.copyfile(file2,file1) 和 subprocess.call("cat " + file2 + " >> " + file1, shell=True),两者都给了我相同的结果。具有单个数字的文件包含一个整数和一个换行符(即两个字符),因此当我将两个文件放在一起时,file2 的前两个字符将被覆盖,而不是仅添加到末尾。如果我使用“cat file2 >> file1”通过 shell 执行此操作,则不会发生这种情况,并且效果很好。

这就是我的意思:

import numpy as np
from subprocess import call

f.open(file1)
f.write('2\n')
np.savetxt(file2,datafile,fmt)
call("cat " + file2 " >> " + file1, shell=True)

所以而不是得到:

2
data data data ...
data data data ...

我得到:

2
ta data data ...
data data data ...

我不知道是什么导致了这个问题,但这非常令人沮丧。有什么建议么?

4

3 回答 3

1

问题是你还没有刷新 f。"2\n" 仍在文件缓冲区中,并在 cat 完成后 f 最终关闭时覆盖其他数据。但是有更好的方法来做到这一点。阅读 numpy docs savetxt,您可以传入文件句柄。Numpy 可以使用现有的文件句柄来写入其数据。不需要第二个临时文件。

import numpy as np

with open(file1, "w") as f:
    f.write('2\n')
    np.savetxt(f, datafile, fmt)
于 2013-10-18T23:49:21.460 回答
1

你试过file1先关闭吗?

 f.close()
 np.savetxt... Etc
于 2013-10-18T22:20:16.350 回答
0

要附加file2file1,您可以使用@krookik 建议'a'的文件模式:

from shutil import copyfileobj

with open(file1, 'w') as f: # write file1
    f.write('2\n')
# `with`-statement closes the file automatically

# append file2 to file1
with open(file2, 'rb') as input_file, open(file1, 'ab') as output_file:
    copyfileobj(input_file, output_file)

您的代码不起作用,因为它可能会丢失f.flush()f.close()@beroe 建议f.write('2\n')之后,即,当命令附加到时,其内容尚未从内存刷新到磁盘,稍后写入(当文件在程序退出时隐式关闭时),因此它会覆盖由.catfile1'2\n'cat

于 2013-10-18T22:56:27.933 回答