我从网站下载了一个 CSV (unicode) 文件,这些字段由制表符分隔并在双引号之间,并且换行符不会在每行的末尾出现,如 CSV 所示,如何查看信息的示例用记事本打开 CSV 时:
"campo1" "campo2" "campo3" "campo4"
"campo5" "campo6" "000000AA1011" "000000AA1012"
"000000AA1013" "000000AA1014" "000000AA1015" "000000AA1016"
"000000AA1017" "000000AA1018" "000000AA1019" "000000AA1020"
"000000AA1021" "000000AA1022"
我想将其转换为 CSV(utf-8),以便字段用逗号分隔并且不在双引号之间,并且换行符在 CSV 中完成,这样我可以执行LOAD DATA LOCAL INFILE
fromMySQL
并插入 CSV记录没有任何问题的表MySQL
,我希望 CSV 在使用记事本打开时的外观示例:
campo1,campo2,campo3,campo4,campo5,campo6
000000AA1011,000000AA1012,000000AA1013,000000AA1014,000000AA1015,000000AA1016
000000AA1017,000000AA1018,000000AA1019,000000AA1020,000000AA1021,000000AA1022
值得一提的是,在第一个实例中,尝试获取 CSV(unicode) 并将其插入到表MySQL
中,如下所示:
LOAD DATA LOCAL INFILE 'C:/data.csv' INTO TABLE bd.down_data
FIELDS TERMINATED BY '\t' ESCAPED BY '"'
LINES TERMINATED BY '\n' IGNORE 1 LINES
(campo1, campo2, campo3);
此查询插入数据,但在每个字符后放置一个空格,例如:
campo1 campo2 campo3
0 0 0 0 0 0 A A 1 0 1 1 0 0 0 0 0 0 A A 1 0 1 2 0 0 0 0 0 0 A A 1 0 1 3
0 0 0 0 0 0 A A 1 0 1 7 0 0 0 0 0 0 A A 1 0 1 8 0 0 0 0 0 0 A A 1 0 1 9
并尝试删除空格,如下所示:
Select REPLACE(campo1,' ','') as campo1 from bd.down_data;
但它没有做任何更改,我想问题是原始 CSV 文件的编码,因此我想从 CSV 中纠正问题(在执行 时,字段用逗号分隔并且没有双引号LOAD DATA LOCAL INFILE
),因为如果我再次从 excel 中保存相同的 CSV 作为 CSV 替换它,然后我用记事本打开它,它已经用逗号分隔。
我正在这样做Python
:
import csv
path = 'data.csv'
with open(path, 'r', encoding='utf-8', errors='ignore') as infile, open('final.csv', 'w') as outfile:
inputs = csv.reader(infile)
output = csv.writer(outfile)
for index, row in enumerate(inputs):
if index == 0:
continue
output.writerow(row)
我创建了新文件final.csv
,但没有任何记录,我收到以下错误:
Traceback (most recent call last):
File "export.py", line 9, in <module>
for index, row in enumerate(inputs):
_csv.Error: line contains NULL byte
更新:
实际文件:
https://drive.google.com/open?id=1LnCJVVc83HPAXAc88BMtKoHFIHpP5xtW
该文件最初使用 Unicode,但使用 UTF-16-LE 作为编码格式进行编码(至少它对于示例文件是正确的)。它基本上就是微软一直称之为“UNICODE”文件的东西,虽然它不是一个非常具体的术语......因此我们必须使用 UTF-16 打开文件并使用 UTF-8 作为输出文件:
它生成不带引号的 csv(除非它们是必要的,例如将分隔符作为数据的一部分的单元格)并使用逗号作为分隔符:
该文件的末尾有一个空列,至少在这个文件中没有标题和数据。如果要删除它,只需切片: