python - leer - El carácter de nueva línea de CSV se ve en el error de campo no citado
leer csv python (7)
Este es un error que enfrenté. Había guardado el archivo .csv en MAC OSX.
Mientras guarda, guárdelo como "Valores separados por comas de Windows (.csv)" que resolvió el problema.
el siguiente código funcionó hasta el día de hoy cuando lo importé de una máquina con Windows y obtuve este error:
carácter de nueva línea visto en el campo sin comillas: ¿necesita abrir el archivo en modo de nueva línea universal?
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]
¿Cómo puedo solucionar este problema?
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)
Esto funcionó para mí en 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
Intenta ejecutar dos2unix
primero en tus archivos importados de Windows
Me doy cuenta de que esta es una publicación anterior, pero me encontré con el mismo problema y no veo la respuesta correcta, así que lo intentaré
Error de Python:
_csv.Error: new-line character seen in unquoted field
Causado por intentar leer archivos CSV de Macintosh (formato pre OS X). Estos son archivos de texto que usan CR para el final de la línea. Si usa MS Office, asegúrese de seleccionar formato CSV simple o CSV (MS-DOS) . No use CSV (Macintosh) como tipo de guardar como.
Mi versión preferida de EOL sería LF (Unix / Linux / Apple), pero no creo que MS Office brinde la opción de guardar en este formato.
Para Mac OS X, guarde su archivo CSV en formato "Windows Comma Separated (.csv)".
Será bueno ver el archivo csv en sí, pero esto podría funcionar para usted, pruébelo, reemplace:
file_read = csv.reader(self.file)
con:
file_read = csv.reader(self.file, dialect=csv.excel_tab)
O bien, abra un archivo con universal newline mode
y páselo a csv.reader
, como:
reader = csv.reader(open(self.file, ''rU''), dialect=csv.excel_tab)
O bien, use splitlines()
, como este:
def read_file(self):
with open(self.file, ''r'') as f:
data = [row for row in csv.reader(f.read().splitlines())]
return data
Si esto te sucede en mac (como me sucedió a mí):
- Guarde el archivo como
CSV (MS-DOS Comma-Separated)
Ejecute el siguiente script
with open(csv_filename, ''rU'') as csvfile: csvreader = csv.reader(csvfile) for row in csvreader: print '', ''.join(row)