这是我创建的一个测试,用于重现我使用时遇到的问题 tempfile.NamedTemporaryFile()。问题是,当我使用tempfile时 我的CSV中的数据会在文件末尾被截断。
运行此测试脚本时,temp2.csv将被截断并且temp1.csv 将与原始CSV的大小相同。
我正在使用Python 2.7.1。
下载示例CSV#!/usr/bin/env python
import tempfile
import shutil
def main():
f = open('RECS05alldata.csv')
data = f.read()
f.close()
f = open('temp1.csv', 'w+b')
f.write(data)
f.close()
temp = tempfile.NamedTemporaryFile()
temp.write(data)
shutil.copy(temp.name, 'temp2.csv')
temp.close()
if __name__ == '__main__':
main()
答案 0 :(得分:9)
在temp.write(data)之后添加temp.flush()。
答案 1 :(得分:2)
在关闭文件之前复制该文件。文件是缓冲的,这意味着它们中的一些将在等待写入文件时保留在缓冲区中。作为文件关闭的一部分,close
会将缓冲区中的所有剩余数据写出到文件中。
这与NamedTemporaryFile
无关。
答案 2 :(得分:0)
我认为您的问题是,当您致电shutil.copy
时,Python并未将整个文件刷新到磁盘。
更改
temp = tempfile.NamedTemporaryFile()
temp.write(data)
shutil.copy(temp.name, 'temp2.csv')
temp.close()
到
temp = tempfile.NamedTemporaryFile()
temp.write(data)
temp.close()
shutil.copy(temp.name, 'temp2.csv')