You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python ftplib循环调用storbinary仅首文件正常其余为空的问题

解决FTP循环写入文件仅第一个有内容的问题

问题根源:你打开文件后,第一次调用storbinary会将文件指针移动到文件末尾,后续循环复用同一个文件对象时,指针已经停在结尾,没有数据可以读取传输,因此生成空文件。

提供两种可行解决方案:

方案一:每次循环重新打开文件

每次循环时重新打开目标文件,确保文件指针始终处于起始位置:

from ftplib import FTP
from cred import *

ftp_conn = FTP()
ftp_conn.connect(host=hostname, port=21)
ftp_conn.login(user=username, passwd=password)
counter = 0

try:
    for i in range(10):
        filename = f'testfile{i+1}'
        # 使用with语句自动管理文件生命周期
        with open('./testfile', mode='rb') as file:
            ftp_conn.storbinary(cmd=f'STOR /stresstest/{filename}', fp=file)
        print(f'wrote file: {filename}')
        counter += 1

except FileNotFoundError:
    print('File does not exist!')

ftp_conn.quit()
print(f'Written {counter} files to {ftp_conn.host}')

方案二:传输前重置文件指针

仅打开一次文件,每次传输前通过seek(0)将指针移回文件开头,减少文件IO操作:

from ftplib import FTP
from cred import *

ftp_conn = FTP()
ftp_conn.connect(host=hostname, port=21)
ftp_conn.login(user=username, passwd=password)
counter = 0

try:
    with open('./testfile', mode='rb') as file:
        for i in range(10):
            filename = f'testfile{i+1}'
            # 将文件指针重置到起始位置
            file.seek(0)
            ftp_conn.storbinary(cmd=f'STOR /stresstest/{filename}', fp=file)
            print(f'wrote file: {filename}')
            counter += 1

except FileNotFoundError:
    print('File does not exist!')

ftp_conn.quit()
print(f'Written {counter} files to {ftp_conn.host}')

两种方案对比:方案一适合小文件操作,逻辑简单;方案二减少了文件打开/关闭的开销,更适合大文件的批量传输场景。

内容的提问来源于stack exchange,提问作者Husky-CGN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:01:17