[python] 인용되지 않은 필드 오류에 CSV 개행 문자가 표시됨

다음 코드는 오늘까지 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에서 이런 일이 발생하면 (나에게했던 것처럼) :

  1. 파일을 다른 이름으로 저장 CSV (MS-DOS Comma-Separated)
  2. 다음 스크립트를 실행하십시오.

    with open(csv_filename, 'rU') as csvfile:
        csvreader = csv.reader(csvfile)
        for row in csvreader:
            print ', '.join(row)

답변

dos2unixWindows에서 가져온 파일을 먼저 실행 하십시오.


답변

이것은 내가 직면 한 오류입니다. .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