Utiliser les requêtes python pour télécharger le fichier CSV
Voici mon code:
import csv
import requests
with requests.Session() as s:
s.post(url, data=payload)
download = s.get('url that directly download a csv report')
Cela me donne l'accès au fichier csv. J'ai essayé différentes méthode pour traiter le télécharger:
Cela vous donnera le fichier csv dans une chaîne:
print download.content
Cette impression de la première ligne et de retour d'erreur: _csv.Erreur: caractère de nouvelle ligne vu dans des sociétés non cotées champ
cr = csv.reader(download, dialect=csv.excel_tab)
for row in cr:
print row
Cela permettra d'imprimer une lettre de chaque ligne et de ne pas imprimer le tout:
cr = csv.reader(download.content, dialect=csv.excel_tab)
for row in cr:
print row
Ma question est qu'est-ce qui est le moyen le plus efficace pour lire un fichier csv dans cette situation.
Et comment faire pour télécharger le réel de fichier csv.
grâce
source d'informationauteur viviwill
Vous devez vous connecter pour publier un commentaire.
Cela devrait vous aider:
De sortie de l'échantillon:
Liés à la question avec la réponse: https://stackoverflow.com/a/33079644/295246
Edit: d'Autres réponses sont utiles si vous avez besoin de télécharger de gros fichiers (c'est à dire
stream=True
).De simplifier ces réponses, et d'augmenter les performances lors du téléchargement d'un gros fichier, ci-dessous peuvent travailler un peu plus efficace.
Par la mise en
stream=True
dans la demande, lorsque l'on passer.iter_lines()
au format csv.reader(), nous passons un générateur au format csv.le lecteur). Ce faisant, nous permettons à des csv.reader() paresseusement itérer sur chaque ligne de la réponse àfor row in reader
.Cela évite de charger la totalité du fichier en mémoire avant de commencer le traitement, de réduire drastiquement la charge de la mémoire pour les gros fichiers.
Vous pouvez également utiliser le
DictReader
pour itérer les dictionnaires de{'columnname': 'value', ...}
D'un peu de recherche, ce que je comprends le fichier doit être ouvert en universel de retour à la ligne mode, vous ne pouvez pas faire directement avec le contenu de la réponse (je suppose).
Pour terminer la tâche, vous pouvez enregistrer le contenu téléchargé dans un fichier temporaire, ou d'un processus en mémoire.
Enregistrer en tant que fichier:
En mémoire:
(À mettre à jour)
Vous pouvez mettre à jour la accepté de répondre avec la iter_lines méthode de demandes si le fichier est très volumineux