【问题标题】:Merging two .csv files together side by side将两个 .csv 文件并排合并在一起
【发布时间】:2017-12-21 09:09:55
【问题描述】:

更新 ***** 我在 Windows 上使用 awk 解决了问题。使用此命令成功并排添加文件。

call awk -F"\t" "NR==FNR{a[NR]=$1; next} {print a[FNR], $0}" OFS="\t" test1.csv test2.csv

我已经尝试了几种方法,但仍然无法使其正常工作,我猜这与其中一个文件中的特殊字符有关。使用paste 工具,很简单。

paste test1.csv test2.csv. > Test3.csv in Linux. 

但我无法访问任何与此任务相关的 Linux。

我的环境是 Windows 7,安装了 Python 2.7 (No Pandas) 和 Perl Strawberry。

我需要将 2 个(或更多)csv 文件并排合并在一起。这些文件将始终具有相同的行数。

我用 python 试过了,没用。

Join txt files side by side in python

我已经使用 Batch 尝试过,但没有成功。

Merge csv file side by side using batch file.

test1.csv 包含

python pdf2txt.py -o C:\Users\user\Desktop\Folder\Folder2\
python pdf2txt.py -o C:\Users\user\Desktop\Folder\Folder2\
python pdf2txt.py -o C:\Users\user\Desktop\Folder\Folder2\

test2.csv 包含

123456.pdf
123457.pdf
124587.pdf

我想要的输出是 (Test3.csv) 是一个制表符分隔的文件,其中包含;

python pdf2txt.py -o C:\Users\user\Desktop\Folder\Folder2\    123456.pdf
python pdf2txt.py -o C:\Users\user\Desktop\Folder\Folder2\    123457.pdf
python pdf2txt.py -o C:\Users\user\Desktop\Folder\Folder2\    124587.pdf

非常感谢任何帮助。

谢谢你。

【问题讨论】:

  • 你说你已经尝试了各种东西 - 你遇到了什么问题?请发布您当前的代码并告诉我们您得到了什么结果或错误。
  • 你试过什么?如果您不向我们展示,我们无法告诉您您做错了什么。
  • 你怎么不知道你用的是什么语言?请修复标签。
  • 仅仅因为您安装了 Strawberry Perl 并不能使其成为 Perl 问题。您可能也安装了 C 编译器,但没有标记 C。除非您有特定语言的示例,否则请不要标记垃圾邮件。我正在删除 Perl。

标签: python windows csv merge


【解决方案1】:

这是使用zip 的解决方案。您可能需要根据 csv 文件的确切设置来使用分隔符和引号字符

with open('test1.csv', 'rb') as t1, open('test2.csv', 'rb') as t2, open('output.csv', 'wb') as output:
     r1 = csv.reader(t1, delimiter=' ')
     r2 = csv.reader(t2, delimiter=' ')
     w = csv.writer(output, delimiter=' ')
     for a, b in zip(r1, r2):
             w.writerow(a + b)

【讨论】:

    【解决方案2】:

    这是使用pyexcel 的另一种更直观的解决方案:

    >>> import pyexcel as p
    >>> left=p.get_sheet(file_name='left.csv')
    >>> left
    left.csv:
    +------------------------------------------------------------+
    | python pdf2txt.py -o C:\Users\user\Desktop\Folder\Folder2\ |
    +------------------------------------------------------------+
    | python pdf2txt.py -o C:\Users\user\Desktop\Folder\Folder2\ |
    +------------------------------------------------------------+
    | python pdf2txt.py -o C:\Users\user\Desktop\Folder\Folder2\ |
    +------------------------------------------------------------+
    >>> right=p.get_sheet(file_name='right.csv')
    >>> right
    right.csv:
    +------------+
    | 123456.pdf |
    +------------+
    | 123457.pdf |
    +------------+
    | 124587.pdf |
    +------------+
    >>> left.column+=right # that's it
    >>> left
    left.csv:
    +------------------------------------------------------------+------------+
    | python pdf2txt.py -o C:\Users\user\Desktop\Folder\Folder2\ | 123456.pdf |
    +------------------------------------------------------------+------------+
    | python pdf2txt.py -o C:\Users\user\Desktop\Folder\Folder2\ | 123457.pdf |
    +------------------------------------------------------------+------------+
    | python pdf2txt.py -o C:\Users\user\Desktop\Folder\Folder2\ | 124587.pdf |
    +------------------------------------------------------------+------------+
    >>> left.save_as('merged.csv') # save it
    

    对于庞大的数据集,上述解决方案将很慢或无法完成。因此这里是处理大量数据集的代码:

    >>> import pyexcel as p
    >>> left=p.iget_array(file_name='left.csv')
    >>> right=p.iget_array(file_name='right.csv')
    >>> p.isave_as(array=(a+b for a, b in zip(left, right)), dest_file_name='merged.csv')
    >>> p.free_resources()
    

    【讨论】:

      【解决方案3】:

      python pyexcel 包有pyexcel.cookbook.merge_two_files(和pyexcel.cookbook.merge_files 用于合并N个文件)。

      pip install pyexcel,见http://docs.pyexcel.org

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-29
        • 2020-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多