将 CSV 文件上传到 postgres DB 时 python 出现 UnicodeEncode 错误
UnicodeEncode error in python when uploading CSV file to postgres DB
尝试使用 Python2.7
将 CSV 文件上传到 Postgres 数据库时,我不断收到 UnicodeEncode 错误
首先,我创建了 CSV 格式的文件。该文件有非拉丁字符,这就是为什么我下载它并对它有字符串的第二列进行编码的原因:
writer = csv.writer(response, dialect='excel')
writer.writerow(tuple(corresponding_data[btn]["columns"].split(',')))
for row in rows:
field_1 = row[0]
field_2 = row[1].encode(encoding='UTF-8')
fields = [field_1, field_2]
writer.writerows([fields])
文件创建没有错误。当我在 Excel 中打开它时,我看到有一些值,例如:Dajï¿ï¿
为了上传文件并将其保存在 Postgres 的 table 中,我使用了名为:CSVKit 的 python 模块。
我就是这样做的:
import codecs
f = codecs.open(absolute_base_file, 'rb', encoding='utf-8')
delimiter = ","
no_header_row = False
try:
csv_table = table.Table.from_csv(f, name=table_name_temp, no_header_row=no_header_row, delimiter=delimiter)
尽管我指定了编码,但我一直收到错误消息:
<type 'exceptions.UnicodeEncodeError'>
我不知道还能在这里尝试什么。
已编辑
检查数据库中的值后,我发现它们实际上没有任何非拉丁字符,但有些值带有空格,当我保存它们时,它们会被统一编码(空格)。
我认为这就是导致问题的原因。
您可以尝试使用 unicodecsv 而不是内置的 csv
毕竟,在将值写入 CSV 之前,我已经将它们展平了。
我使用 unidecode 模块如下:
from unidecode import unidecode
for row in rows:
field_1 = row[0]
field_2 = unidecode(row[1]).encode(encoding='UTF-8') # LINE CHANGED
fields = [field_1, field_2]
writer.writerows([fields])
return response
虽然不是永久性的解决方案,但这暂时解决了我的问题。
尝试使用 Python2.7
将 CSV 文件上传到 Postgres 数据库时,我不断收到 UnicodeEncode 错误首先,我创建了 CSV 格式的文件。该文件有非拉丁字符,这就是为什么我下载它并对它有字符串的第二列进行编码的原因:
writer = csv.writer(response, dialect='excel')
writer.writerow(tuple(corresponding_data[btn]["columns"].split(',')))
for row in rows:
field_1 = row[0]
field_2 = row[1].encode(encoding='UTF-8')
fields = [field_1, field_2]
writer.writerows([fields])
文件创建没有错误。当我在 Excel 中打开它时,我看到有一些值,例如:Dajï¿ï¿
为了上传文件并将其保存在 Postgres 的 table 中,我使用了名为:CSVKit 的 python 模块。
我就是这样做的:
import codecs
f = codecs.open(absolute_base_file, 'rb', encoding='utf-8')
delimiter = ","
no_header_row = False
try:
csv_table = table.Table.from_csv(f, name=table_name_temp, no_header_row=no_header_row, delimiter=delimiter)
尽管我指定了编码,但我一直收到错误消息:
<type 'exceptions.UnicodeEncodeError'>
我不知道还能在这里尝试什么。
已编辑
检查数据库中的值后,我发现它们实际上没有任何非拉丁字符,但有些值带有空格,当我保存它们时,它们会被统一编码(空格)。 我认为这就是导致问题的原因。
您可以尝试使用 unicodecsv 而不是内置的 csv
毕竟,在将值写入 CSV 之前,我已经将它们展平了。 我使用 unidecode 模块如下:
from unidecode import unidecode
for row in rows:
field_1 = row[0]
field_2 = unidecode(row[1]).encode(encoding='UTF-8') # LINE CHANGED
fields = [field_1, field_2]
writer.writerows([fields])
return response
虽然不是永久性的解决方案,但这暂时解决了我的问题。