1

我为此使用了 ftputil 模块,但遇到了一个问题,它不支持将 'a'(append) 附加到文件,如果你通过 'w' 写入,它会覆盖内容。

这就是我尝试过的,我被困在那里:

with ftputil.FTPHost(host, ftp_user, ftp_pass) as ftp_host:
      with ftp_host.open("my_path_to_file_on_the_server", "a") as fobj:
         cupone_wr = input('Enter coupons with a space: ')
         cupone_wr = cupone_wr.split(' ')
         for x in range(0, len(cupone_wr)):
             cupone_str = '<p>Your coupon %s</p>\n' % cupone_wr[x]
             data = fobj.write(cupone_str)
         print(data)

目标是将旧条目保留在文件中,并在每次再次调用脚本时将新条目添加到文件末尾。

4

2 回答 2

1

事实上,ftputil 不支持追加。因此,您要么必须下载完整的文件并重新上传附加记录。否则您将不得不使用另一个 FTP 库。

例如内置的 Python ftplib 支持追加。另一方面,它不(至少不容易)支持流媒体。相反,在内存中构建新记录并立即上传/附加它们更容易:

from ftplib import FTP
from io import BytesIO

flo = BytesIO() 

cupone_wr = input('Enter coupons with a space: ')
cupone_wr = cupone_wr.split(' ')
for x in range(0, len(cupone_wr)):
    cupone_str = '<p>Your coupon %s</p>\n' % cupone_wr[x]
    flo.write(cupone_str)

ftp = FTP('ftp.example.com', 'username', 'password')

flo.seek(0)
ftp.storbinary('APPE my_path_to_file_on_the_server', flo)
于 2021-09-13T05:16:47.327 回答
1

ftputil作者在这里:-)

Martin 是正确的,因为没有明确的附加模式。也就是说,您可以使用rest参数打开类似文件的对象。在您的情况下,rest需要是您要附加到的文件的原始长度。

文档警告不要使用rest指向文件后的参数,因为我很确定rest不会以这种方式使用。但是,如果您仅针对特定服务器使用您的程序并且可以验证其行为,则可能值得尝试使用rest. 我很想知道它是否适合你。

于 2021-09-13T21:47:11.507 回答