다음 코드는 오늘까지 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
.
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
Macintosh (OS X 이전 형식) CSV 파일을 읽으려고 할 때 발생합니다. 행 끝에 CR을 사용하는 텍스트 파일입니다. MS Office를 사용하는 경우 일반 CSV 형식 또는 CSV (MS-DOS) 를 선택해야합니다 . CSV (Macintosh)를 다른 이름 으로 저장 유형으로 사용하지 마십시오 .
내가 선호하는 EOL 버전은 LF (Unix / Linux / Apple)이지만 MS Office가이 형식으로 저장하는 옵션을 제공하지 않는다고 생각합니다.
답변
Mac OS X의 경우 CSV 파일을 “Windows Comma Separated (.csv)”형식으로 저장합니다.
답변
Mac에서 이런 일이 발생하면 (나에게했던 것처럼) :
- 파일을 다른 이름으로 저장
CSV (MS-DOS Comma-Separated)
-
다음 스크립트를 실행하십시오.
with open(csv_filename, 'rU') as csvfile: csvreader = csv.reader(csvfile) for row in csvreader: print ', '.join(row)
답변
dos2unix
Windows에서 가져온 파일을 먼저 실행 하십시오.
답변
이것은 내가 직면 한 오류입니다. .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