Je télécharge un fichier CSV à partir d'un formulaire et je souhaite récupérer sa première ligne en Python. Je suis sur une application App Engine, et en utilisant webapp2 (je ne sais pas si c'est pertinent?).Télécharger et lire le fichier CSV dans google app engine
J'ai essayé de nombreuses réponses que j'ai trouvées sur les forums, mais aucune ne fonctionne. J'ai essayé:
def post(self):
csv_file = self.request.POST.get('csvFile')
fileReader = csv.reader(csv_file.file)
Mais je reçois: AttributeError: 'unicode' object has no attribute 'file'
J'ai aussi essayé:
def post(self):
csvFile = self.request.get('csvFile')
print csvFile
stringReader = csv.reader(StringIO.StringIO(csvFile))
for row in stringReader:
print row
Mais je reçois:
C:\fakepath\my_file.csv ['C:\\fakepath\\my_file.csv']
pour mes déclarations d'impression (si je faire request.get ou request.POST.get).
J'ai aussi essayé:
def post(self):
content = self.request.POST.multi['csvFile'].file.read()
Mais je reçois: AttributeError: 'str' object has no attribute 'file'
J'ai aussi essayé:
def post(self):
csvFile = self.request.files['csvFile']
file = open(csvFile, 'r')
Mais je reçois: AttributeError: files
J'ai aussi essayé:
def post(self):
csvFile = self.request.POST['csvFile'].value.decode('utf-8')
file = csvFile.splitlines()
data = csv.DictReader(file)
Mais je reçois: AttributeError: 'unicode' object has no attribute 'value'
Je ne comprends pas ces erreurs car beaucoup de ces solutions semblent travailler pour d'autres personnes.
Ma forme ressemble à ceci (je suis en utilisant un polymère):
<form is="iron-form" action="/upload" method="POST" enctype="multipart/form-data"
on-iron-form-submit="_formSubmitted" id="form" name="form">
<div class="box">
<input type="file" name="csvFile" id="file" class="inputfile"
data-multiple-caption="{count} files selected" multiple on-tap="_chooseFile"/>
<label for="file" name="label">
<span>Choose a CSV file...</span></label>
</div>
Avez-vous des suggestions? Merci!