python - 通过 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
希望大家能理解。如果您不这样做,请发表评论。谢谢你。
解决方案
您的代码适用于我的 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')
推荐阅读
- docker - docker run 只显示最后一个 CMD?
- sql-server - 如果存在,则将 csv 文件插入 mssql,然后使用 apache nifi 更新
- python - 仅自定义一个列管理模板
- python - 关于良好的编码实践,“函数和方法结束时无用的返回”是什么意思?
- reactjs - aws cognito - 如何在前端的正确时间保持 id 令牌刷新
- flutter - Flutter - SharedPreference 不保存值 - 一直返回 NULL
- python - 使用 Adam 找到使用 Pytorch 的 Rosenbrock 函数的最小值
- templates - 使用 Iron:router 将某些功能或事件的输出返回到 Meteor 中的某个新页面或模板
- mysql - 从 mysql 上的传输流接收到意外的 EOF 或 0 字节
- c# - 如何根据开头的内容按数字顺序放置文本文件?