1. ホーム
  2. python

[解決済み】CSVの改行文字が引用されていないフィールドで見られるエラー

2022-01-29 19:33:51

質問内容

以下のコードは、今日までうまくいっていたのですが、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