我需要读取本地文件并使用FTP复制到远程位置,我将相同的文件file.txt重复复制到远程位置数百次,使用不同的名称,如f1.txt,f2.txt ... f1000.txt等现在,是否有必要始终打开,读取,关闭每个FTP副本的本地file.txt,或者是否有办法存储到变量中并一直使用该文件并避免文件打开,关闭函数。 file.txt是6KB的小文件。以下是我正在使用的代码
for i in range(1,101):
fname = 'file'+ str(i) +'.txt'
fp = open('file.txt', 'rb')
ftp.storbinary('STOR ' + fname, fp)
fp.close()
我尝试读入字符串变量并替换fp但ftp.storbinary需要第二个参数才能使用方法read(),请建议是否有更好的方法来避免文件打开关闭或让我知道它是否没有性能提升所有。我在Windows 7上使用python 2.7.10。
答案 0 :(得分:4)
只需在循环前打开它,然后在以下后关闭它:
fp = open('file.txt', 'rb')
for i in range(1,101):
fname = 'file'+ str(i) +'.txt'
fp.seek(0)
ftp.storbinary('STOR ' + fname, fp)
fp.close()
更新确保在调用fp.seek(0)
之前添加ftp.storbinary
,否则read
调用将在第一次迭代中耗尽文件,如@所示eryksun。
更新2 ,具体取决于文件的大小,使用BytesIO
可能会更快。这样文件内容就会保存在内存中,但仍然是一个类似文件的对象(即它将采用read
方法)。
from io import BytesIO
with open('file.txt', 'rb') as f:
output = BytesIO()
output.write(f.read())
for i in range(1, 101):
fname = 'file' + str(i) + '.txt'
output.seek(0)
ftp.storbinary('STOR ' + fname, fp)