我有两个CSV文件,每个文件都包含要合并到一个数据库中的不同列。我设置了一个包含两个文件中所有列的数据库,但是当我使用load data infile导入这两个文件而不是合并(IE数据文件1填充1-6列,数据文件2填充7-10列)时,我得到的数据库的行数是原来的两倍(每个CSV中的每个记录占一行),NULLS填充源CSV中未表示的数据。
我知道我可以通过以某种方式合并CSV,在启用覆盖的情况下导入,或者合并数据库中的数据来解决这个问题-对我来说,最有效的方法是什么?
发布于 2011-01-17 14:52:01
要做到这一点,最好的方法是使用脚本。CSV导入脚本通常是用脚本语言编写的,比如python、ruby或php。
您只需要第二个CSV的导入器对第一个CSV中创建的记录执行更新,因此脚本实际上只有5-10行。如果您提供每个CSV的示例记录,我很乐意为您编写一个。
python编辑:这是一个用于组合文件的python脚本,在file1和file2的代码行之间添加了一个分号。这实际上完成了Linux的paste命令所能做的事情。
lines1 = open('file1.txt').readlines()
lines2 = open('file2.txt').readlines()
outfile = open('outfile.txt', 'w')
if len(lines1) != len(lines2):
raise Exception("Files need to be the same length, but file1 is %s lines long and file2 is %s lines long" % (len(lines1), len(lines2)));
for i in range(len(lines1)):
combined = lines1[i].strip() + ";" + lines2[i].strip() + "\n"
outfile.write(combined)您可以通过将其另存为combine.py并键入python combine.py来运行它。放置它的文件夹应该包含file1.txt、file2.txt和outfile.txt。
发布于 2011-01-17 15:05:49
我会看看Perl和Text::CSV模块。您需要考虑的一个问题是,这两个文件中的数据顺序是否相同。
https://stackoverflow.com/questions/4710625
复制相似问题