CSV символ новой строки, замеченный в ошибке поля без кавычек
следующий код работал до сегодняшнего дня, когда я импортировал из окна машины и получил эту ошибку:
символ новой строки, видимый в поле без кавычек - вам нужно открыть файл в режиме universal-newline?
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)
7 ответов:
будет хорошо увидеть сам файл 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
Я понимаю, что это старый пост, но я столкнулся с той же проблемой и не вижу правильного ответа, поэтому я дам ему попробовать
Ошибка Python:
_csv.Error: new-line character seen in unquoted fieldвызвано попыткой чтения файлов CSV Macintosh (pre OS X formatted). Это текстовые файлы, которые используют CR для конца строки. При использовании MS Office убедитесь, что вы выбрали либо plain CSV или CSV (MS-DOS). не используйте CSV (Macintosh) сохранить как-тип файла.
моя предпочтительная версия EOL будет LF (Unix/Linux/Apple), но я не думаю, что MS Office предоставляет возможность сохранять в этом формате.
Если это случится с вами на mac (как это было со мной):
- сохраните файл как
CSV (MS-DOS Comma-Separated)запустите следующий скрипт
with open(csv_filename, 'rU') as csvfile: csvreader = csv.reader(csvfile) for row in csvreader: print ', '.join(row)
Это ошибка, с которой я столкнулся. Я его спас .csv-файл в MAC OSX.
при сохранении сохраните его как " значения, разделенные запятыми Windows (.csv)", который решил проблему.
это сработало для меня на 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
Comments