python转换csv

时间:2017-08-09 15:41:42

标签: python sql

我正在将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 зона (Восточная Сибирь)

1 个答案:

答案 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 зона (Восточная Сибирь)");

输出与您的输出不匹配,因此我怀疑不是显示代码的输出,或者不是您使用的确切代码。