以下代码一直工作到今天,当我从Windows机器导入并出现此错误时:
在不带引号的字段中看到换行符-是否需要以通用换行模式打开文件?
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)
很高兴看到csv文件本身,但这可能对您有用,请尝试一下,替换:
file_read = csv.reader(self.file)
与:
file_read = csv.reader(self.file, dialect=csv.excel_tab)
或者,使用打开文件universal newline mode并将其传递给csv.reader,例如:
universal newline mode
csv.reader
reader = csv.reader(open(self.file, 'rU'), dialect=csv.excel_tab)
或者,splitlines()像这样使用:
splitlines()
def read_file(self): with open(self.file, 'r') as f: data = [row for row in csv.reader(f.read().splitlines())] return data