0

我有两个 CSV 文件,每个文件都包含我想合并到一个数据库中的不同列。我建立了一个包含两个文件中所有列的数据库,但是当我使用 load data infile 来导入两个文件而不是合并时(IE 数据文件 1 填充列 1-6,数据文件 2 填充 7-10)我得到了一个数据库有两倍的行数(每个 CSV 中的每条记录一行)和 NULLS 填充源 CSV 中未表示的数据。

我知道我可以通过以某种方式合并 CSV、在启用覆盖的情况下导入或组合数据库中的数据来解决这个问题——对我来说最有效的方法是什么?

4

3 回答 3

1

最好的方法是使用脚本。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.txtfile2.txtoutfile.txt

于 2011-01-17T06:52:01.487 回答
1

将两个 CSV 合二为一。

如果你在linux平台,使用paste命令加入两个或多个文件。

粘贴(1)

姓名
       粘贴 - 合并文件行

概要
       粘贴 [选项]... [文件]...

描述
       写入由顺序对应的行组成的行
       每个文件,由制表符分隔,到标准输出。  
       没有 FILE,或者当 FILE 为 - 时,读取标准输入。

       多头期权的强制性参数对于空头期权也是强制性的。

       -d, --delimiters=LIST
              重用 LIST 中的字符而不是 TAB

       -s,--串行
              一次粘贴一个文件,而不是并行粘贴

       --help 显示此帮助并退出

       - 版本
              输出版本信息并退出

paste file1.csv file2.csv > file3.csv
于 2011-01-17T06:57:35.077 回答
0

我会看看 Perl 和Text::CSV模块。您需要考虑的一个问题是数据在两个文件中的顺序是否相同。

于 2011-01-17T07:05:48.593 回答