次のコードは、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)を使用しないでください save-asタイプとして。
推奨されるEOLバージョンはLF(Unix/Linux/Apple)ですが、MS Officeにはこの形式で保存するオプションが用意されているとは思いません。
Mac OS Xの場合、CSVファイルを「Windowsカンマ区切り(.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)
最初にWindowsのインポートされたファイルでdos2unix
を実行してみてください
これは私が直面したエラーです。 MAC OSXに.csvファイルを保存しました。
保存中に、「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
これはかなり長い間回答されてきましたが、私の問題は解決していません。私はcsvの読み取りにDictReaderとStringIOを使用していますが、他のいくつかの問題があります。区切り文字を明示的に置き換えることで、問題をより簡単に解決できました。
with urllib.request.urlopen(q) as response:
raw_data = response.read()
encoding = response.info().get_content_charset('utf8')
data = raw_data.decode(encoding)
if '\r\n' not in data:
# proably a windows delimited thing...try to update it
data = data.replace('\r', '\r\n')
巨大なCSVファイルには適さないかもしれませんが、私のユースケースではうまく機能しました。
代替の高速ソリューション:同じエラーに直面しました。 lubuntuマシンでGNUMERICの「奇妙な」csvファイルを再度開き、ファイルをcsvファイルとしてエクスポートしました。これにより問題が修正されました。