Lea el contenido del archivo .tar.gz del sitio web en un objeto Python 3.x

Soy nuevo en Python. No puedo entender qué estoy haciendo mal al intentar leer el contenido del archivo .tar.gz en python. El tarfile que me gustaría leer está alojado en la siguiente dirección web:

ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/b0/ac/Breast_Cancer_Res_2001_Nov_9_3(1)_61-65.tar.gz

más información archivada en este sitio (solo para que pueda confiar en los contenidos) http://www.pubmedcentral.nih.gov/utils/oa/oa.fcgi?id=PMC13901

El archivo tar contiene archivos .pdf y .nxml del artículo de la revista. Y también un par de archivos de imagen.

Si abro el archivo en mi navegador copiando y pegando. Puedo guardar en una ubicación de mi PC e importar la multa del archivo tar con los siguientes comandos (nota: winzip cambia el archivo de .tar.gz a simplemente .tar cuando guardo en la ubicación):

    import tarfile thetarfile = "C:/Users/dfcm/Documents/Breast_Cancer_Res_2001_Nov_9_3(1)_61-65.tar" tfile = tarfile.open(thetarfile) tfile 

    Sin embargo, si bash acceder al archivo directamente usando comandos similares:

     thetarfile = "ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/b0/ac/Breast_Cancer_Res_2001_Nov_9_3(1)_61-65.tar.gz" bbb = tarfile.open(thetarfile) 

    Eso resulta en el siguiente error:

      Traceback (most recent call last): File "", line 1, in  bbb = tarfile.open(thetarfile) File "C:\Python30\lib\tarfile.py", line 1625, in open return func(name, "r", fileobj, **kwargs) File "C:\Python30\lib\tarfile.py", line 1687, in gzopen fileobj = bltn_open(name, mode + "b") File "C:\Python30\lib\io.py", line 278, in __new__ return open(*args, **kwargs) File "C:\Python30\lib\io.py", line 222, in open closefd) File "C:\Python30\lib\io.py", line 615, in __init__ _fileio._FileIO.__init__(self, name, mode, closefd) IOError: [Errno 22] Invalid argument: 'ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/b0/ac/Breast_Cancer_Res_2001_Nov_9_3(1)_61-65.tar' 

    ¿Alguien puede explicar lo que estoy haciendo mal al intentar leer el archivo .tar.gz directamente desde la dirección web? Gracias por adelantado. Chris

    Desafortunadamente no puedes abrir archivos desde la red. Las cosas son un poco más complejas aquí. Debe indicar al intérprete que cree una solicitud de red y cree un objeto que represente el estado de la solicitud. Esto se puede hacer utilizando el módulo urllib .

     import urllib.request import tarfile thetarfile = "ftp://ftp.ncbi.nlm.nih.gov/pub/pmc/b0/ac/Breast_Cancer_Res_2001_Nov_9_3(1)_61-65.tar.gz" ftpstream = urllib.request.urlopen(thetarfile) thetarfile = tarfile.open(fileobj=ftpstream, mode="r|gz") 

    El objeto ftpstream es similar a un archivo que representa la conexión con el servidor ftp. Entonces el módulo tarfile puede acceder a este flujo. Como no pasamos el nombre del archivo, tenemos que especificar la compresión en el parámetro de mode .