Der folgende Code funktionierte bis heute, als ich von einem Windows-Computer importierte und diesen Fehler bekam:

Zeilenumbruchzeichen im nicht zitierten Feld - Müssen Sie die Datei im Universal-Zeilenumbruchmodus öffnen?

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]

Wie kann ich dieses Problem beheben?

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)
121
GrantU 26 Juni 2013 im 12:56

8 Antworten

Beste Antwort

Es ist gut, die CSV-Datei selbst zu sehen, aber dies könnte für Sie funktionieren. Probieren Sie es aus und ersetzen Sie:

file_read = csv.reader(self.file)

Mit:

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

Oder öffnen Sie eine Datei mit universal newline mode und übergeben Sie sie an csv.reader.

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

Oder verwenden Sie splitlines() wie folgt:

def read_file(self):
    with open(self.file, 'r') as f:
        data = [row for row in csv.reader(f.read().splitlines())]
    return data
179
alecxe 26 Juni 2013 im 09:14

Dies funktionierte für mich unter 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
Resonance 28 Okt. 2016 im 16:49

Versuchen Sie zuerst, dos2unix unter Ihren Windows-importierten Dateien auszuführen

5
rectummelancolique 26 Juni 2013 im 09:00

Ich weiß, dass dies seit einiger Zeit beantwortet wurde, aber mein Problem nicht lösen kann. Aufgrund einiger anderer Komplikationen verwende ich DictReader und StringIO für meine CSV-Lesung. Ich konnte das Problem einfacher lösen, indem ich Trennzeichen explizit ersetzte:

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')

Könnte für enorme CSV-Dateien nicht sinnvoll sein, hat aber für meinen Anwendungsfall gut funktioniert.

1
Dougyfresh 1 Dez. 2018 im 00:40

Speichern Sie unter Mac OS X Ihre CSV-Datei im Format "Windows Comma Separated (.csv)".

31
BoltzmannBrain 21 Mai 2015 im 17:33

Dies ist ein Fehler, mit dem ich konfrontiert war. Ich hatte eine CSV-Datei in MAC OSX gespeichert.

Speichern Sie es beim Speichern als "Windows Comma Separated Values (.csv)", wodurch das Problem behoben wurde.

2
Suraj 8 März 2017 im 01:19

Alternative und schnelle Lösung: Ich hatte den gleichen Fehler. Ich öffne die "seltsame" CSV-Datei in GNUMERIC auf meinem Ubuntu-Computer erneut und exportiere die Datei als CSV-Datei. Dies hat das Problem behoben.

0
p699 26 Dez. 2018 im 19:04

Mir ist klar, dass dies ein alter Beitrag ist, aber ich bin auf dasselbe Problem gestoßen und sehe nicht die richtige Antwort, also werde ich es versuchen

Python-Fehler:

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

Verursacht durch den Versuch, Macintosh-CSV-Dateien (vor OS X formatiert) zu lesen. Dies sind Textdateien, die CR als Zeilenende verwenden. Wenn Sie MS Office verwenden, stellen Sie sicher, dass Sie entweder das einfache CSV -Format oder CSV (MS-DOS) auswählen. Verwenden Sie CSV (Macintosh) nicht als Sicherungstyp.

Meine bevorzugte EOL-Version wäre LF (Unix / Linux / Apple), aber ich glaube nicht, dass MS Office die Option zum Speichern in diesem Format bietet.

50
g.kovatchev 11 Jän. 2015 im 18:44