CSV Django मॉड्यूल का उपयोग करके फ़ाइल को यूनिवर्सल-न्यूलाइन मोड में खोलें


86

मैं मॉड्यूल का उपयोग करके पायथन में model.filefieldएक सीएसवी फ़ाइल को पार्स करने के लिए Django में प्रवेश करने की कोशिश कर रहा हूं csv। यह विंडोज पर काम कर रहा है, लेकिन मैक पर इसने मुझे यह दिया:

Exception Type: Error

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

यह कोड है:

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चीज है क्या यह एक मॉडल पर एक फ़ाइल नाम है?
एकलकरण 21

फ़ाइलअप = मॉडल.फाइलफील्ड (क्रिया शब्द = "CsvFile", upload_to = 'ExcelFiles') यदि मैं customerbulk.objects.get (pk = 1) जैसी छोटी क्वेरी बनाता हूं
mdd

1
उपयोग करने का सटीक कारण rU(यह ओपन () फ़ंक्शन से संबंधित है और सीएसवी विशिष्ट नहीं है।): 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#open
zengr

पायथन> = 3 में, के newline=''बजाय का उपयोग करें mode='U'
त्रिकसे

जवाबों:


150

मैं अंत में हल मिल गया:

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

2
मेरा मानना ​​है कि आप इसे सरल बना सकते हैं। यह सिर्फ फ़ाइल खोलने के बाद शुरू करने के लिए अजीब लगता है। निम्नलिखित ने मुझे एक्सेल स्प्रेडशीट एक्सपोर्ट से CSV में डिफॉल्ट्स का उपयोग करके एक ही समस्या को दूर करने में मदद की: डेटा = csv.reader (ओपन (FILENAME, 'rU'), quotechar = '' ', delimiter =', ')
timbo

4
हां, खोलने के बाद फाइल की शुरुआत करने की जरूरत नहीं है। >>> o = खुला (mypath, 'rU') बिट, 'rU' ध्वज के साथ महत्वपूर्ण जादू है जो मेरे मामले में काम आया।
rd108

13
PEP278 ने समझाया कि इसका क्या 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 +1 को मूल PEP से जोड़ने के लिए जो औचित्य की व्याख्या करता है।
नईमेश मिस्त्री

पाइथन> = 3 में, newlineइसके बजाय का उपयोग करें , डिफ़ॉल्ट ऐसा है, newline=Noneजो newline=''इसे छोड़कर भी है ताकि यह नए लिंक का भी अनुवाद कर सके \n। मैं अनिश्चित हूं कि इनमें से कौन बराबर हैmode='U'
टाइमडेल्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.