Descargar archivos de una lista si no se han descargado

Puedo hacer esto en c #, y el código es bastante largo.

Sería genial si alguien pudiera mostrarme cómo se haría esto a través de python.

El pseudo código es:

url: www.example.com/somefolder/filename1.pdf 1. load file into an array (file contains a url on each line) 2. if file eg filename1.pdf doesn't exist, download file 

El script puede estar en el siguiente diseño:

 /python-downloader/ /python-downloader/dl.py /python-downloader/urls.txt /python-downloader/downloaded/filename1.pdf 

Esto debería hacer el truco, aunque supongo que el archivo urls.txt solo contiene la url. No la url: prefijo.

 import os import urllib DOWNLOADS_DIR = '/python-downloader/downloaded' # For every line in the file for url in open('urls.txt'): # Split on the rightmost / and take everything on the right side of that name = url.rsplit('/', 1)[-1] # Combine the name and the downloads directory to get the local filename filename = os.path.join(DOWNLOADS_DIR, name) # Download the file if it does not exist if not os.path.isfile(filename): urllib.urlretrieve(url, filename) 

Aquí hay una versión ligeramente modificada del script de WoLpH para Python 3.3.

 #!/usr/bin/python3.3 import os.path import urllib.request links = open('links.txt', 'r') for link in links: link = link.strip() name = link.rsplit('/', 1)[-1] filename = os.path.join('downloads', name) if not os.path.isfile(filename): print('Downloading: ' + filename) try: urllib.request.urlretrieve(link, filename) except Exception as inst: print(inst) print(' Encountered unknown error. Continuing.') 

Es menos código en Python, podrías usar algo como esto:

 import urllib2 improt os url="http://.../" # Translate url into a filename filename = url.split('/')[-1] if not os.path.exists(filename) outfile = open(filename, "w") outfile.write(urllib2.urlopen(url).read()) outfile.close()