将两个.csv文件并排合并在一起

时间:2017-07-16 22:43:10

标签: python windows csv merge

更新*****我在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。

我需要将两个(或更多)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

非常感谢任何帮助。

谢谢你。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

以下是使用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()

答案 2 :(得分:0)

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

({pip install pyexcel,请参阅http://docs.pyexcel.org