2017-02-17 3 views
1

Aufgabe: gelesene Datei, um Struktur zu überprüfen. Meine Test-Upload-Datei hat 5 Zeilen mit Header und etwa 20-30 Spalten. Codierung ist ISO-8859-1Gelesene Datei mit csv.reader

Klingt einfach, aber es treibt mich langsam in den Wahnsinn. Die einzigen zur Zeit Arbeitslösung ist Umweg über Model:

file = request.FILES.getlist('job_file', None)[0] 
newdoc = models.Jobs(job_file=file) 
newdoc.save() 
with codecs.open(newdoc.job_file.name, "r", encoding='iso-8859-1') as fp: 
    file_content = list(csv.reader(fp, delimiter=';', quotechar='"')) 

Schmutzig, verrückt und weit von akzeptablen

Nichtarbeitslösungen:
1:

file_content = list(csv.reader(file, delimiter=';', quotechar='"')) 
print(file_content) 
>>>_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?) 

2:

3:

file_content = list(csv.reader(file.read(), delimiter=';', quotechar='"')) 
print(file_content) 
>>>_csv.Error: iterator should return strings, not int (did you open the file in text mode?) 

Einige Hinweise:

print(file.read()) 
>>>b';"";""\r\n' <-- WRONG see file content at the top 
print(file.readlines()) 
>>>[] 

Bitte rette mich!

+0

gibt einen Schuss zu: 'data = csv.reader (request.FILES.getlist ('job_file', None) [0], delimiter = ';', QuoteChar = '"') 'und wenn es nicht funktioniert, versuche es mit:' csv.reader (codecs.EncodedFile (request.FILES.getlist ('job_file', None) [0], "iso-8859-1"), delimiter = ';', quotechar = '"')' – Todor

+0

'_csv.Error: Iterator sollte Zeichenfolgen, keine Bytes zurückgeben (haben Sie die Datei im Textmodus geöffnet?)' für beide :( –

Antwort

1

Es ist nicht notwendig, die Datei zu öffnen, Sie können Ihre hochgeladene Datei in TextIOWrapper konvertieren. Hier ist saubere Beispiel

from io import StringIO 

file = request.FILES.getlist('job_file', None)[0] 
newdoc = models.Jobs.objects.create(job_file=file) 
fp = StringIO(file.read(), encoding='iso-8859-1') 
file_content = list(csv.reader(fp, delimiter=';', quotechar='"')) 
+0

'AttributeError: 'InMemoryUploadedFile' Objekt hat kein Attribut 'lesbar' ' –

+0

@StefanWeiss können Sie vollständige Traceback bieten, ich habe ähnliche Code in meinem Projekt, und alles funktioniert ok –

+0

>> alles funktioniert ok - das ist mein derzeitiges Problem.Ich benutzte viele Internet-Lösungen, die für andere Leute funktionierte, aber es tut Es funktioniert nicht für mich. es muss ein kleiner Unterschied zwischen meinem Beispiel und anderen sein. aber ich kann es nicht finden. vollständige Traceback wäre zu groß: 'Datei" F: \ Python \ mein_project \ main \ views.py ", Zeile 1497, in url_check_test_file fp = TextIOWrapper (Datei, Codierung = 'iso-8859-1') AttributeError: ' InMemoryUploadedFile 'Objekt hat kein Attribut' lesbar'' –

Verwandte Themen