LINUX.ORG.RU

Как в python'е скачать текстовый файл по FTP и разобрать его построчно?

 ,


0

1

Есть URL текстового файла, нужно скачать и построчно прочитать. На bash'е я бы для этого использовал wget, получилось бы что-то такое

wget -q -O - ftp://example.com/dir/file.txt | whle read line
do
    echo $line
done

А как аналогичную штуку проделать в python'е? В интернетах какие-то сложные примеры попадаются вроде этого:

import ftplib

path = 'pub/Health_Statistics/NCHS/nhanes/2001-2002/'
filename = 'L28POC_B.xpt'

ftp = ftplib.FTP("Server IP") 
ftp.login("UserName", "Password") 
ftp.cwd(path) # Это что мне ещё придётся самому URL разбивать на адрес сервера, директорию в которую надо перейти...
ftp.retrbinary("RETR " + filename ,open(filename, 'wb').write)
ftp.quit()

Файл качается, сохраняется локально, после этого его ещё придётся открывать, а потом удалять. Ну нафиг, слишком сложно, длинно и неизящно.

Меня вполне устроил бы вызов wget'а и обработка его выхлопа, но это в python'е тоже сделано как-то через жопу накосяк. В одних местах предлагают такое:

process = subprocess.Popen(cmd, shell=True,
                           stdout=subprocess.PIPE, 
                           stderr=subprocess.PIPE)
А в других пишут, что stdout=PIPE использовать нельзя.

Так как же в python'е коротко и красиво скачать файл по URL'у и обработать построчно?

★★★★★

urllib работает — внезапно — не только с HTTP:

In [1]: from urllib.request import urlopen

In [2]: urlopen('ftp://mirror.yandex.ru/debian/README').readline()
Out[2]: b'See http://www.debian.org/ for information about Debian GNU/Linux.\n'

thriller ★★
()
Ответ на: комментарий от thriller

urllib

urllib работает — внезапно — не только с HTTP:

Отлично.

Camel ★★★★★
() автор топика

ЕМНИП

from ftplib import FTP
from StringIO import StringIO

path = '/pub/Health_Statistics/NCHS/nhanes/2001-2002/L28POC_B.xpt'

ftp = FTP("Server IP") 
ftp.login("UserName", "Password") 
r = StringIO()
ftp.retrbinary("RETR " + path, r.write)
ftp.quit()

print r.getvalue()

https://docs.python.org/2/library/stringio.html

shrub ★★★★★
()
Последнее исправление: shrub (всего исправлений: 1)

Файл качается, сохраняется локально, после этого его ещё придётся открывать, а потом удалять. Ну нафиг, слишком сложно, длинно и неизящно.

use StrinIO, Luke

Aeon
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.