我有两个 CSV 文件,每个文件都包含我想合并到一个数据库中的不同列。我建立了一个包含两个文件中所有列的数据库,但是当我使用 load data infile 来导入两个文件而不是合并时(IE 数据文件 1 填充列 1-6,数据文件 2 填充 7-10)我得到了一个数据库有两倍的行数(每个 CSV 中的每条记录一行)和 NULLS 填充源 CSV 中未表示的数据。
我知道我可以通过以某种方式合并 CSV、在启用覆盖的情况下导入或组合数据库中的数据来解决这个问题——对我来说最有效的方法是什么?
我有两个 CSV 文件,每个文件都包含我想合并到一个数据库中的不同列。我建立了一个包含两个文件中所有列的数据库,但是当我使用 load data infile 来导入两个文件而不是合并时(IE 数据文件 1 填充列 1-6,数据文件 2 填充 7-10)我得到了一个数据库有两倍的行数(每个 CSV 中的每条记录一行)和 NULLS 填充源 CSV 中未表示的数据。
我知道我可以通过以某种方式合并 CSV、在启用覆盖的情况下导入或组合数据库中的数据来解决这个问题——对我来说最有效的方法是什么?
最好的方法是使用脚本。CSV 导入脚本通常使用脚本语言编写,例如 python、ruby 或 php。
您只需要第二个 CSV 的导入器来对在第一个 CSV 中创建的记录执行更新,因此脚本实际上只有 5-10 行。如果您提供每个 CSV 的示例记录,我很乐意为您写一个。
编辑: 这是一个组合文件的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
。
将两个 CSV 合二为一。
如果你在linux平台,使用paste
命令加入两个或多个文件。
粘贴(1) 姓名 粘贴 - 合并文件行 概要 粘贴 [选项]... [文件]... 描述 写入由顺序对应的行组成的行 每个文件,由制表符分隔,到标准输出。 没有 FILE,或者当 FILE 为 - 时,读取标准输入。 多头期权的强制性参数对于空头期权也是强制性的。 -d, --delimiters=LIST 重用 LIST 中的字符而不是 TAB -s,--串行 一次粘贴一个文件,而不是并行粘贴 --help 显示此帮助并退出 - 版本 输出版本信息并退出
如
paste file1.csv file2.csv > file3.csv
我会看看 Perl 和Text::CSV模块。您需要考虑的一个问题是数据在两个文件中的顺序是否相同。