Добавить к существующему файлу на SFTP-сервере через pysftp - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть один файл с именем Account.txt на SFTP-сервере, и я пытаюсь добавить строку в этот файл.Это мое усилие:

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

Надеюсь, вы, ребята, можете понять.Оставьте комментарий, если вы этого не сделаете.Спасибо.

1 Ответ

0 голосов
/ 29 ноября 2018

Ваш код работает для меня с SFTP-сервером OpenSSH.

Возможно, это ошибка в базовом 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')
...