我正在将CSV文件转换为SQL查询,我有这个输出。你能建议如何避免这个麻烦吗?
我的代码是:
import csv
import unicodedata
openFile = open('region_mapping.csv', 'r')
csvFile = csv.reader(openFile)
header = next(csvFile)
headers = map((lambda x: '`'+x+'`'), header)
insert = 'INSERT INTO Table (' + ", ".join(headers) + ") VALUES "
for row in csvFile:
values = map((lambda x: '"'+x+'"'), row)
print (insert +"("+ ", ".join(values) +");" )
openFile.close()
输出:
INSERT INTO toolbox.region ( province_name;min_order_price;region_name ) VALUES ( '��������� ����;10000;4 ���� (��������� ������)' );
该文件的一个例子是:
province_name,min_order_price,region_name
Алтайский край,10000,4 зона (Восточная Сибирь)
答案 0 :(得分:0)
正确地为文件添加正确的编码,但"正确打印"假设适当的控制台或IDE编码以及具有可用字符的字体。如果使用Windows,我建议使用Python 3.6,如果这是一个选项。它修复了打印到控制台的问题,但您仍需要支持正在打印的字符的字体。
注意:您的文件编码可能会有所不同。除非您提供文件内容的hexdump,否则很难说。由于您没有获得UnicodeDecodeError,您可能拥有正确的编码,但字体或stdout编码不正确以支持Cyrillic。
import csv
openFile = open('region_mapping.csv', 'r', encoding='utf8')
csvFile = csv.reader(openFile)
header = next(csvFile)
headers = map((lambda x: '`'+x+'`'), header)
insert = 'INSERT INTO Table (' + ", ".join(headers) + ") VALUES "
for row in csvFile:
values = map((lambda x: '"'+x+'"'), row)
print (insert +"("+ ", ".join(values) +");" )
openFile.close()
输入:
province_name,min_order_price,region_name
Алтайский край,10000,4 зона (Восточная Сибирь)
输出:
INSERT INTO Table (`province_name`, `min_order_price`, `region_name`) VALUES ("Алтайский край", "10000", "4 зона (Восточная Сибирь)");
输出与您的输出不匹配,因此我怀疑不是显示代码的输出,或者不是您使用的确切代码。