2017-04-18 4 views
2

Je dois lire un fichier texte de 50 Go. Je dois faire un traitement avec ce fichier. Je ne peux pas télécharger le fichier texte pendant que je fais le traitement sur un serveur distant. Est-il possible d'utiliser Python pour diffuser le contenu du fichier en utilisant son URL et le lire ligne par ligne?Lire Big texte en ligne en utilisant python

+0

Quel protocole utilisez-vous pour accéder au fichier en ligne? ftp? http? Si c'est http ou https, alors vous pouvez utiliser 'urllib2.urlopen()' pour obtenir un objet semblable à un fichier et le parcourir, ligne par ligne. Je l'ai essayé avec http/https, mais pas ftp, cela pourrait fonctionner. –

+0

jetez un oeil: https://docs.python.org/2/library/io.html ou https://docs.python.org/2/library/stringio.html et https://docs.python.org /2/library/urllib.html – Dadep

+0

J'utilise http, donc urlilib2 n'ouvrira pas le fichier entier? – Noor

Répondre

1

En fait, la façon la plus simple est la suivante:

import urllib2 # the lib that handles the url stuff 

data = urllib2.urlopen(target_url) # it's a file like object and works just like a file 
for line in data: # files are iterable 
    print line 

Vous pouvez même raccourcir à

import urllib2 

for line in urllib2.urlopen(target_url): 
    print line 

Mais rappelez-vous en Python, les questions de lisibilité.

Cependant, c'est le moyen le plus simple mais pas le moyen le plus sûr car la plupart du temps avec la programmation réseau, vous ne savez pas si la quantité de données à attendre sera respectée. Alors vous feriez mieux de lire généralement un montant fixe et raisonnable des données, quelque chose que vous savez être suffisant pour les données que vous attendez, mais empêchera votre script d'été inondée:

import urllib2 

data = urllib2.urlopen(target_url).read(20000) # read only 20 000 chars 
data = data.split("\n") # then split it into lines 

for line in data: 
    print line 

En python 3 et jusqu'à l'utilisation urllib.request au lieu de urllib2

1

Vous pouvez faire avec urllib2,

urlopen fonctionnera comme tels que les fichiers et les fichiers sont itérateurs 1 ligne à rendement un moment jusqu'à ce qu'il n'y a plus de lignes t o rendement.

import urllib2 
for line in urllib2.urlopen("http://www.myhost.com/SomeFile.txt"): 
    print line