2017-05-05 2 views
0

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!

Répondre

0

J'ai finalement trouvé le problème: Il vient de Polymer, l'objet 'fer-forme' ne supporte pas enctype="multipart/form-data". J'ai enlevé is="iron-form" et tout a bien fonctionné.