सीएसएसवी नई लाइन चरित्र अयोग्य क्षेत्र त्रुटि में देखा गया


121

निम्न कोड आज तक काम किया जब मैंने विंडोज मशीन से आयात किया और यह त्रुटि मिली:

नई पंक्ति में अयोग्य क्षेत्र में देखा जाने वाला वर्ण - क्या आपको फ़ाइल को सार्वभौमिक-न्यूलाइन मोड में खोलने की आवश्यकता है?

import csv

class CSV:


    def __init__(self, file=None):
        self.file = file

    def read_file(self):
        data = []
        file_read = csv.reader(self.file)
        for row in file_read:
            data.append(row)
        return data

    def get_row_count(self):
        return len(self.read_file())

    def get_column_count(self):
        new_data = self.read_file()
        return len(new_data[0])

    def get_data(self, rows=1):
        data = self.read_file()

        return data[:rows]

मैं इस समस्या को कैसे हल कर सकता हूं?

def upload_configurator(request, id=None):
    """
    A view that allows the user to configurator the uploaded CSV.
    """
    upload = Upload.objects.get(id=id)
    csvobject = CSV(upload.filepath)

    upload.num_records = csvobject.get_row_count()
    upload.num_columns = csvobject.get_column_count()
    upload.save()

    form = ConfiguratorForm()

    row_count = csvobject.get_row_count()
    colum_count = csvobject.get_column_count()
    first_row = csvobject.get_data(rows=1)
    first_two_rows = csvobject.get_data(rows=5)

नीचे rectummelancolique का जवाब है जो मेरे समान मुद्दे को हल करता है। stackoverflow.com/a/17315726/3131666
kmantel

जवाबों:


181

Csv फ़ाइल को स्वयं देखना अच्छा होगा, लेकिन यह आपके लिए काम कर सकता है, इसे आज़माएं, प्रतिस्थापित करें:

file_read = csv.reader(self.file)

साथ में:

file_read = csv.reader(self.file, dialect=csv.excel_tab)

या, के साथ एक फ़ाइल खोलें universal newline modeऔर इसे पास करें csv.reader, जैसे:

reader = csv.reader(open(self.file, 'rU'), dialect=csv.excel_tab)

या, splitlines()इस तरह का उपयोग करें:

def read_file(self):
    with open(self.file, 'r') as f:
        data = [row for row in csv.reader(f.read().splitlines())]
    return data

यह अब एक ही त्रुटि देता है, लेकिन अपलोड शुरू होने पर लाइन .num_records = csvobject.get_row_count () अब
GrantU

1
और जब मैं विभाजित लाइनों के संस्करण की कोशिश करता हूं (जो बहुत ठंडा धन्यवाद है) मुझे यूनिकोड के लिए मजबूर करना पड़ता है: स्ट्रिंग या बफर की आवश्यकता है, S3BotoStorageFile पाया
ग्रांटयू

4
आखिरकार किस विकल्प ने काम किया? Btw, आप फ़ाइल दो बार पढ़ रहे हैं: में get_row_count()और में get_column_count()- विचार में फ़ाइल को पढ़ने __init__और याद dataमें self.data, फिर अन्य तरीकों में इसका इस्तेमाल करते हैं।
alecxe

विभाजन के लिए +1 () जो OSX पर विभिन्न स्वरूपण विकल्पों के साथ खिलवाड़ से बचा जाता है। आशा है कि यह अन्य प्लेटफार्मों पर भी काम करेगा ...
python1981

बहुत बढ़िया जवाब। का उपयोग कर - "बोली = csv.excel_tab" हालांकि, csv.DictReader के साथ उपयोग किए जाने पर आउटपुट को खराब कर देता है। बस 'आरयू' विकल्प जादुई रूप से काम करता है
मर्फी

52

मुझे लगता है कि यह एक पुरानी पोस्ट है, लेकिन मैं उसी समस्या में भाग गया और सही उत्तर नहीं देख रहा हूं इसलिए मैं इसे आजमाऊंगा

पायथन त्रुटि:

_csv.Error: new-line character seen in unquoted field

Macintosh (पूर्व OS X स्वरूपित) CSV फ़ाइलों को पढ़ने की कोशिश करने के कारण। ये टेक्स्ट फाइलें हैं जो लाइन के अंत के लिए CR का उपयोग करती हैं। यदि MS Office का उपयोग करना सुनिश्चित करें कि आप या तो सादे CSV प्रारूप या CSV (MS-DOS) का चयन करते हैंCSV (Macintosh) को सेव- टाइप के रूप में उपयोग न करें

मेरा पसंदीदा ईओएल संस्करण एलएफ (यूनिक्स / लिनक्स / एप्पल) होगा, लेकिन मुझे नहीं लगता कि एमएस ऑफिस इस प्रारूप में बचत करने का विकल्प प्रदान करता है।


4
एमएस डॉस कोमा सेपरेट मेरे (एक ही त्रुटि) के लिए काम नहीं किया, लेकिन विंडोज कॉमा सेपरेटेड।
tmthyjames

3
यदि आप एक मैक पर हैं, तो यह बिल्कुल सही उत्तर है।
हैशज़ार्ड

मुझे ओएस एक्स पर एक ही मुद्दा मिलता है। मैं खुद को एक नई सीएसवी फ़ाइल बनाने के लिए पाता हूं। बस सादे CSV प्रारूप या CSV (MS-DOS) के रूप में वर्तमान को सहेजने से समस्या ठीक नहीं होती है।
पाइडरमैन

1
ओएस एक्स पर, विंडोज कोमा सेपरेटेड सीएसवी ने काम किया, एमएस डॉस कोमा सेपरेट नहीं किया।
user2348114

31

Mac OS X के लिए, अपनी CSV फ़ाइल को "विंडोज कोमा सेपरेटेड (.csv)" प्रारूप में सहेजें।


1
धन्यवाद, यह आवश्यक घटक था, जैसा कि मैं मैक डब्ल्यू / एमएस कार्यालय का उपयोग कर रहा हूं।
travelingbones

18

अगर यह मैक पर आपके साथ होता है (जैसा कि मेरे साथ हुआ):

  1. फ़ाइल को इस रूप में सहेजें CSV (MS-DOS Comma-Separated)
  2. निम्न स्क्रिप्ट चलाएँ

    with open(csv_filename, 'rU') as csvfile:
        csvreader = csv.reader(csvfile)
        for row in csvreader:
            print ', '.join(row)

2
तुमने मेरी दुनिया को हिलाकर रख दिया है।
काटा

5

dos2unixपहले अपनी विंडोज़ आयातित फाइलों पर चलने की कोशिश करें


वास्तव में कोई विकल्प नहीं है जो मुझे उपयोगकर्ता को किसी विशेष संशोधन के बिना विंडोज और मैक दोनों से सीएसवी अपलोड करने की अनुमति देने की आवश्यकता है। आयात को Excel (Windows) से CSV के रूप में सहेजा गया था ताकि शायद कुछ अतिरिक्त हो जो इनको पढ़ने के लिए पायथन में किया जाना चाहिए?
ग्रांटु

@GranU आप Mac OS X 10.0 या बाद के संस्करण की बात कर रहे हैं, Mac OS 9 या उससे पहले की, सही नहीं? 9 और 10 के बीच, मैक ओएस \x0d(ProDOS) लाइन एंडिंग से \x0a(UNIX) लाइन एंडिंग में बदल गया।
डेमियन येरिक

2

यह एक त्रुटि है जिसका मैंने सामना किया। मैंने MAC OSX में .csv फाइल को सेव किया था।

सहेजते समय, इसे "विंडोज कॉमा सेपरेटेड वैल्यूज़ (.csv)" के रूप में सहेजें, जिससे समस्या हल हो गई।


1

इसने मेरे लिए OSX पर काम किया।

# allow variable to opened as files
from io import StringIO

# library to map other strange (accented) characters back into UTF-8
from unidecode import unidecode

# cleanse input file with Windows formating to plain UTF-8 string
with open(filename, 'rb') as fID:
    uncleansedBytes = fID.read()
    # decode the file using the correct encoding scheme
    # (probably this old windows one) 
    uncleansedText = uncleansedBytes.decode('Windows-1252')

    # replace carriage-returns with new-lines
    cleansedText = uncleansedText.replace('\r', '\n')

    # map any other non UTF-8 characters into UTF-8
    asciiText = unidecode(cleansedText)

# read each line of the csv file and store as an array of dicts, 
# use first line as field names for each dict. 
reader = csv.DictReader(StringIO(cleansedText))
for line_entry in reader:
    # do something with your read data 

1

मुझे पता है कि यह कुछ समय के लिए उत्तर दिया गया है लेकिन मेरी समस्या का समाधान नहीं है। मैं अपने csv पढ़ने के लिए कुछ अन्य जटिलताओं के कारण DictReader और StringIO का उपयोग कर रहा हूं। मैं स्पष्ट रूप से सीमांकक की जगह समस्या को हल करने में सक्षम था:

with urllib.request.urlopen(q) as response:
    raw_data = response.read()
    encoding = response.info().get_content_charset('utf8') 
    data = raw_data.decode(encoding)
    if '\r\n' not in data:
        # proably a windows delimited thing...try to update it
        data = data.replace('\r', '\r\n')

भारी CSV फ़ाइलों के लिए उचित नहीं हो सकता है, लेकिन मेरे उपयोग के मामले के लिए अच्छी तरह से काम किया।


इसने मेरी समस्या हल कर दी! धन्यवाद here यहाँ देखें
aof

0

वैकल्पिक और तेज समाधान: मैंने एक ही त्रुटि का सामना किया। मैंने अपने lubuntu मशीन पर GNUMERIC में "wierd" csv फ़ाइल को फिर से खोल दिया और फ़ाइल को csv फ़ाइल के रूप में निर्यात किया। इससे समस्या ठीक हो गई।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.