123 votes

Erreur de caractère de nouvelle ligne CSV vu dans un champ non cité

Le code suivant a fonctionné jusqu'à aujourd'hui où j'ai importé à partir d'une machine Windows et j'ai obtenu cette erreur :

le caractère de nouvelle ligne est vu dans un champ non cité - devez-vous ouvrir le fichier en mode universel de nouvelle ligne ?

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]

Comment puis-je résoudre ce problème ?

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)

187voto

alecxe Points 50783

Il serait bon de voir le fichier csv lui-même, mais cela pourrait fonctionner pour vous, faites un essai, remplacez :

file_read = csv.reader(self.file)

avec :

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

Ou bien, ouvrez un fichier avec universal newline mode et le transmettre à csv.reader comme :

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

Ou bien, utilisez splitlines() comme ceci :

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

55voto

g.kovatchev Points 651

Je me rends compte que c'est un vieux message, mais j'ai rencontré le même problème et je ne vois pas la bonne réponse, alors je vais essayer.

Erreur Python :

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

Causé par la tentative de lecture de fichiers CSV Macintosh (formatés avant OS X). Il s'agit de fichiers texte qui utilisent CR pour la fin de ligne. Si vous utilisez MS Office, assurez-vous que vous avez sélectionné le format simple CSV ou CSV (MS-DOS) . Ne pas utiliser CSV (Macintosh) comme type de sauvegarde.

Ma version EOL préférée serait LF (Unix/Linux/Apple), mais je ne pense pas que MS Office offre la possibilité d'enregistrer dans ce format.

32voto

BoltzmannBrain Points 1970

Pour Mac OS X, enregistrez votre fichier CSV au format "Windows Comma Separated (.csv)".

19voto

Nimo Points 527

Si cela vous arrive sur mac (comme cela a été le cas pour moi) :

  1. Enregistrez le fichier comme CSV (MS-DOS Comma-Separated)
  2. Exécutez le script suivant

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

5voto

rectummelancolique Points 1507

Essayez d'exécuter dos2unix sur vos fichiers importés de Windows d'abord

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X