le code suivant fonctionnait jusqu'à aujourd'hui, lorsque j'ai importé à partir d'une machine Windows et que cette erreur s'est produite:
Caractère de nouvelle ligne vu dans un champ non entre guillemets - devez-vous ouvrir le fichier en mode de nouvelle ligne universel?
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)
Ce sera bien de voir le fichier csv lui-même, mais cela pourrait fonctionner pour vous, essayez, 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 transmettez-le à csv.reader
, comme suit:
reader = csv.reader(open(self.file, 'rU'), dialect=csv.Excel_tab)
Ou, 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
Je me rends compte que c’est un vieux post, 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 une tentative de lecture de fichiers CSV Macintosh (formatés avant OS X). Ce sont des fichiers texte qui utilisent CR pour la fin de ligne. Si vous utilisez MS Office, veillez à sélectionner le format CSV en clair ou le format CSV (MS-DOS). N'utilisez pas de fichier CSV (Macintosh) as save-as.
Ma version préférée pour EOL serait LF (Unix/Linux/Apple), mais je ne pense pas que MS Office offre l'option d'enregistrer dans ce format.
Pour Mac OS X, enregistrez votre fichier CSV au format "Windows Comma Separated (.csv)".
Si cela vous arrive sur mac (comme cela m’a été fait):
CSV (MS-DOS Comma-Separated)
Exécuter le script suivant
with open(csv_filename, 'rU') as csvfile:
csvreader = csv.reader(csvfile)
for row in csvreader:
print ', '.join(row)
Essayez d’exécuter dos2unix
sur vos fichiers importés Windows
C'est une erreur à laquelle j'ai fait face. J'avais enregistré le fichier .csv sous MAC OSX.
Lors de l’enregistrement, enregistrez-le sous "Valeurs séparées par des virgules Windows (.csv)", ce qui a résolu le problème.
Cela a fonctionné pour moi sur 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
Je sais que cela a été répondu pendant un certain temps, mais pas résoudre mon problème. J'utilise DictReader et StringIO pour ma lecture csv en raison de certaines complications. J'ai pu résoudre le problème plus simplement en remplaçant explicitement les délimiteurs:
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')
Peut-être pas raisonnable pour d’énormes fichiers CSV, mais a bien fonctionné pour mon cas d’utilisation.
Solution alternative et rapide: j'ai fait face à la même erreur. J'ai rouvert le fichier "étrange" csv dans GNUMERIC sur ma machine lubuntu et l'ai exporté sous forme de fichier csv. Cela a corrigé le problème.