首页 > 解决方案 > 通过 pysftp 附加到 SFTP 服务器上的现有文件

问题描述

我有一个在 SFTP 服务器中命名的文件Account.txt,我正在尝试在该文件中附加一行。这是我的努力:

from io import StringIO
from pysftp import Connection, CnOpts

cnopts = CnOpts()
cnopts.hostkeys = None
with Connection('ftpserver.com'
                ,username= 'username'
                ,password = 'password'
                ,cnopts=cnopts
                ) as sftp:
    with sftp.cd('MY_FOLDER'):
        f = sftp.open('Account.txt', 'ab')
        data='google|33333|Phu|Wood||true|2018-09-21|2018-09-21|google'
        f.write(data+'\n')

当我运行上面的代码时,文件被覆盖,而不是附加。那么,如何追加新行但仍将旧行保留在文件中?

例如:

Account.txt 文件:

facebook|11111|Jack|Will||true|2018-09-21|2018-09-21|facebook
facebook|22222|Jack|Will||true|2018-09-21|2018-09-21|facebook

现在我想在文件中添加行“google|33333|Phu|Wood||true|2018-09-21|2018-09-21|google”。我期待的结果:

Account.txt 文件

facebook|11111|Jack|Will||true|2018-09-21|2018-09-21|facebook
facebook|22222|Jack|Will||true|2018-09-21|2018-09-21|facebook
google|33333|Phu|Wood||true|2018-09-21|2018-09-21|google

希望大家能理解。如果您不这样做,请发表评论。谢谢你。

标签: pythonpython-3.xsftppysftp

解决方案


您的代码适用于我的 OpenSSH SFTP 服务器。

也许这是 Core FTP 服务器中的错误。

您可以尝试手动寻找指向文件末尾的文件写入指针:

with sftp.open('Account.txt', 'r+b') as f:
    f.seek(0, os.SEEK_END)
    data='google|33333|Phu|Wood||true|2018-09-21|2018-09-21|google'
    f.write(data+'\n')

推荐阅读