Próbuję uzyskać dostęp do model.filefield
w Django, aby przeanalizować plik CSV w Pythonie za pomocą csv
modułu. Działa w systemie Windows, ale na Macu dał mi to:
Exception Type: Error
Exception Value: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
To jest kod:
myfile = customerbulk.objects.all()[0].fileup
mydata = csv.reader(myfile)
for email,mobile,name,civilid in mydata:
print email,mobile,name,civilid
customerbulk.objects.all()[0].fileup
rzecz. Czy to nazwa pliku w modelu?rU
(jest związany z funkcją open () i nie jest specyficzny dla csv.):In addition to the standard fopen() values mode may be 'U' or 'rU'. Python is usually built with universal newlines support; supplying 'U' opens the file as a text file, but lines may be terminated by any of the following: the Unix end-of-line convention '\n', the Macintosh convention '\r', or the Windows convention '\r\n'.
Docs.python.org/2/library/functions.html#opennewline=''
zamiastmode='U'
.Odpowiedzi:
W końcu znalazłem rozwiązanie:
mypath = customerbulk.objects.get(pk=1).fileup.path o = open(mypath,'rU') mydata = csv.reader(o)
źródło
rU
oznacza:In a Python with universal newline support open() the mode parameter can also be "U", meaning "open for input as a text file with universal newline interpretation". Mode "rU" is also allowed, for symmetry with "rb".
newline
zamiast tego użyj , domyślnym ustawieniem jestnewline=None
który jest podobny,newline=''
z wyjątkiem tego, że tłumaczy również znaki nowej linii na\n
. Nie jestem pewien, który z nich jest równoważnymode='U'