How do i download a file from ftp in python?

I'm trying to download some public data files. I screenscrape to get the links to the files, which all look something like this:

ftp://ftp.cdc.gov/pub/Health_Statistics/NCHS/nhanes/2001-2002/L28POC_B.xpt

I can't find any documentation on the Requests library website.

asked Aug 1, 2012 at 21:59

The requests library doesn't support ftp:// links.

To download a file from an FTP server you could use urlretrieve:

import urllib.request

urllib.request.urlretrieve('ftp://server/path/to/file', 'file')
# if you need to pass credentials:
#   urllib.request.urlretrieve('ftp://username:password@server/path/to/file', 'file')

Or urlopen:

import shutil
import urllib.request
from contextlib import closing

with closing(urllib.request.urlopen('ftp://server/path/to/file')) as r:
    with open('file', 'wb') as f:
        shutil.copyfileobj(r, f)

Python 2:

import shutil
import urllib2
from contextlib import closing

with closing(urllib2.urlopen('ftp://server/path/to/file')) as r:
    with open('file', 'wb') as f:
        shutil.copyfileobj(r, f)

answered Aug 1, 2012 at 22:22

jfsjfs

381k179 gold badges944 silver badges1613 bronze badges

19

You Can Try this

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)
ftp.retrbinary("RETR " + filename, open(filename, 'wb').write)
ftp.quit()

answered Sep 14, 2012 at 12:12

How do i download a file from ftp in python?

RakeshRakesh

79.5k17 gold badges69 silver badges107 bronze badges

5

Try using the wget library for python. You can find the documentation for it here.

import wget
link = 'ftp://example.com/foo.txt'
wget.download(link)

How do i download a file from ftp in python?

answered Jan 10, 2018 at 9:10

How do i download a file from ftp in python?

4

Use urllib2. For more specifics, check out this example from doc.python.org:

Here's a snippet from the tutorial that may help

import urllib2

req = urllib2.Request('ftp://example.com')
response = urllib2.urlopen(req)
the_page = response.read()

answered Aug 1, 2012 at 22:13

How do i download a file from ftp in python?

ParkerParker

8,32910 gold badges68 silver badges95 bronze badges

    import os
    import ftplib
    from contextlib import closing

    with closing(ftplib.FTP()) as ftp:
        try:
            ftp.connect(host, port, 30*5) #5 mins timeout
            ftp.login(login, passwd)
            ftp.set_pasv(True)
            with open(local_filename, 'w+b') as f:
                res = ftp.retrbinary('RETR %s' % orig_filename, f.write)

                if not res.startswith('226 Transfer complete'):
                    print('Downloaded of file {0} is not compile.'.format(orig_filename))
                    os.remove(local_filename)
                    return None

            return local_filename

        except:
                print('Error during download from FTP')

answered Oct 1, 2014 at 18:11

How do i download a file from ftp in python?

Roman PodlinovRoman Podlinov

22.3k7 gold badges39 silver badges59 bronze badges

1

As several folks have noted, requests doesn't support FTP but Python has other libraries that do. If you want to keep using the requests library, there is a requests-ftp package that adds FTP capability to requests. I've used this library a little and it does work. The docs are full of warnings about code quality though. As of 0.2.0 the docs say "This library was cowboyed together in about 4 hours of total work, has no tests, and relies on a few ugly hacks".

import requests, requests_ftp
requests_ftp.monkeypatch_session()
response = requests.get('ftp://example.com/foo.txt')

answered Jan 7, 2015 at 15:30

NelsonNelson

25.7k5 gold badges34 silver badges30 bronze badges

1

If you want to take advantage of recent Python versions' async features, you can use aioftp (from the same family of libraries and developers as the more popular aiohttp library). Here is a code example taken from their client tutorial:

client = aioftp.Client()
await client.connect("ftp.server.com")
await client.login("user", "pass")
await client.download("tmp/test.py", "foo.py", write_into=True)

answered Mar 25, 2020 at 13:08

How do i download a file from ftp in python?

urllib2.urlopen handles ftp links.

How do i download a file from ftp in python?

sloth

96.5k20 gold badges168 silver badges213 bronze badges

answered Aug 1, 2012 at 22:02

Victor GavroVictor Gavro

1,2779 silver badges11 bronze badges

1

urlretrieve is not work for me, and the official document said that They might become deprecated at some point in the future.

import shutil 
from urllib.request import URLopener
opener = URLopener()
url = 'ftp://ftp_domain/path/to/the/file'
store_path = 'path//to//your//local//storage'
with opener.open(url) as remote_file, open(store_path, 'wb') as local_file:
    shutil.copyfileobj(remote_file, local_file)

answered Apr 15, 2018 at 3:50

GoatWangGoatWang

951 silver badge6 bronze badges

How do I download a file using FTP in Python?

How to Download and Upload Files in FTP Server using Python.
import ftplib FTP_HOST = "ftp.dlptest.com" FTP_USER = "[email protected]" FTP_PASS = "SzMf7rTE4pCrf9dV286GuNe4N".
# connect to the FTP server ftp = ftplib..

How do I download files from FTP?

Uploading and Downloading a file to/from an FTP server.
Navigate to the remote folder where the file you want to download is stored,.
Navigate to the local folder where you want to store the downloaded file,.
Select the file you want to download from the remote folder, and..
Click the Download button..
The ftplib module included in Python allows you to use Python scripts to quickly attach to an FTP server, locate files, and then download them to be processed locally. To open a connection to the FTP server, create an FTP server object using the ftplib. FTP([host [, user [, passwd]]]) method.

How do I download a file in Python?

To download a file from a URL using Python follow these three steps:.
Install requests module and import it to your project..
Use requests. get() to download the data behind that URL..
Write the file to a file in your system by calling open()..