CSV Django modülünü kullanarak dosyayı evrensel yeni satır modunda açın


86

Modülü kullanarak Python'da model.filefieldbir CSV dosyasını ayrıştırmak için Django'da a'ya erişmeye çalışıyorum csv. Windows'ta çalışıyor, ancak Mac'te bana şunu verdi:

Exception Type: Error

Exception Value: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?

Kod bu:

myfile = customerbulk.objects.all()[0].fileup

mydata = csv.reader(myfile)
    for email,mobile,name,civilid in mydata:
        print email,mobile,name,civilid

bu nedir customerbulk.objects.all()[0].fileupşeyi. Bir modelde dosya adı mı?
SingleNegationElimination

fileup = models.FileField (verbose_name = "CsvFile", upload_to = 'ExcelFiles') customerbulk.objects.get (pk = 1) gibi küçük bir sorgu yaparsam
mohd

1
Kullanmanın kesin nedeni rU(open () işleviyle ilgilidir ve 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'. csv'ye
zengr

Python> = 3'te, newline=''yerine kullanın mode='U'.
tricasse

Yanıtlar:


150

Sonunda çözümü buldum:

mypath = customerbulk.objects.get(pk=1).fileup.path
o = open(mypath,'rU')
mydata = csv.reader(o)

2
Bunu basitleştirebileceğine inanıyorum. Dosyayı açtıktan sonra başlangıca gitmek garip görünüyor. Aşağıdakiler, varsayılanları kullanarak bir Excel elektronik tablo dışa aktarımından CSV'ye aynı sorunun üstesinden gelmeme yardımcı oldu: data = csv.reader (open (FILENAME, 'rU'), quotechar = '"', delimiter = ',')
timbo

4
Evet, açıldıktan hemen sonra dosyanın başlangıcına gitmeye gerek yoktur. >>> o = open (mypath, 'rU') biti, 'rU' bayrağı ile benim durumumda işe yarayan önemli sihirdir.
rd108

13
PEP278 ne anlama geldiğini açıkladı rU: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".
Xiao

@Xiao +1, gerekçeyi açıklayan orijinal PEP'e bağlantı için.
Naymesh Mistry

Python> = 3'te kullanmak newlineyerine, varsayılan newline=Nonegibi olan newline=''o da için yeni satır çevirir hariç \n. Bunlardan hangisinin eşdeğer olduğundan emin değilimmode='U'
timdiels
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.