CSV new-line character seen in unquoted field error

the following code worked until today when I imported from a Windows machine and got this error:

new-line character seen in unquoted field - do you need to open the file in universal-newline mode?

    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]

How can I fix this issue?

    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)

It'll be good to see the csv file itself, but this might work for you, give it a try, replace:

    file_read = csv.reader(self.file)

with:

    file_read = csv.reader(self.file, dialect=csv.excel_tab)

Or, open a file with universal newline mode and pass it to csv.reader, like:

    reader = csv.reader(open(self.file, 'rU'), dialect=csv.excel_tab)

Or, use splitlines(), like this:

    def read_file(self):
        with open(self.file, 'r') as f:
            data = [row for row in csv.reader(f.read().splitlines())]
        return data

From: stackoverflow.com/q/17315635

Back to homepage or read more recommendations: