RAF*_*FIQ 0 python windows ftp
我需要读取本地文件并使用 FTP 复制到远程位置,我使用不同的名称(如 f1.txt、f2.txt...f1000.txt 等)将同一文件 file.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()
Run Code Online (Sandbox Code Playgroud)
我尝试读取字符串变量并替换 fp 但 ftp.storbinary 需要第二个参数才能具有方法 read(),请建议是否有更好的方法来避免文件打开关闭,或者让我知道它是否根本没有性能改进。我在 Windows 7 上使用 python 2.7.10。
只需在循环之前打开它,然后在循环之后关闭它:
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()
Run Code Online (Sandbox Code Playgroud)
更新确保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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1551 次 |
| 最近记录: |