Python结合2个XLSX文件

时间:2014-12-01 12:34:44

标签: python arrays excel csv

我有两个需要合并的XLSX文件。它们都是Excel 2010文件(.xlsx),我读过的是空格分隔(我可以修正)。两个文件的行数相同,行排成一行;例如row1,file1将对应于row1,file2等...文件有很长的字段,所以我只是为了简单起见而显示模拟数据。第一个文件的格式为:

a 123 20 20141201
b 456 50 20141130
 .....

第二个文件的格式为:

20141201
20141130
...

因此我希望输出为:

a 123 20 20141201 20141201
b 456 50 20141130 20141130
...

我的代码如下,但似乎有两个问题:

首先,array3的输出格式不正确:

'a 123 20 20141201 \t\r\n', '20141201\n',
'b 456 50 20141130 \t\r\n', '20141130\n', 
....

如何正确连接这些以确保其他日期戳位于制表符,换行符等之前......(\ t \ r \ n)?

其次,当我将此数组写入输出文件时,行是不一致的:

第一行包含1列中的所有内容(注意☺=白色方形符号,不确定为什么它会显示为笑脸?):

     col1                                  col2     col3     col4       col5
row1|a ☺ 123 ☺ 20 ☺ 20141201 ☺☺ 20141201

row2|b                                     456      50       20141130

row3|20141130    

row4|c ......................... 

我的代码在这里:

ins1 = open( "file1.xlsx", "r" )
array1 = []
for line in ins1:
    array1.append(line)
ins1.close()

ins2 = open( "file2.xlsx", "r" )
array2 = []
for line in ins2:
    array2.append(line)
ins2.close()  

array3 = []
for i in range(0, len(array1)):
    array3.append(array1[i])
    array3.append(array2[i])

resultFile = open("output.xlsx",'wb')
wr = csv.writer(resultFile)
print array3
wr.writerow(array3)
resultFile.close()
抱歉,我是Python的新手,所以上面的内容可能不是最好的方法。我愿意接受有关如何解决这个问题的其他建议。我已经看过Pandas,我相信这会使这项任务变得更加容易,但不幸的是我无法安装外部库来排除这个选项。非常感谢任何帮助。

编辑: 基于Serge的答案,这是一个有效的解决方案:

ins1 = open( "file1.xlsx", "r" )
ins2 = open( "file2.xlsx", "r" )
outs = open("output.xlsx",'wb')
for line in ins1:
    line = line.rstrip() + "\t" + next(ins2)
    print line.rstrip()
    outs.write(line)
ins1.close()
ins2.close()
outs.close()  

1 个答案:

答案 0 :(得分:0)

假设您的所有文件都是用空格分隔的csv格式,以下简化代码就足够了:

with open( "file1.xlsx", "r" ) as ins1, open( "file2.xlsx", "r" ) as ins2, \
        open("output.xlsx",'wb') as resultfile :
    for line in ins1:
        line = line.rstrip() + " " + next(ins2)
        print line.rstrip()
        resultfile.write(line)

说明:

  • with确保文件正常关闭,无论代码中发生什么,
  • 以上代码逐行处理文件假设file1和file2已对齐
  • 代码只是从file1中删除行尾,并从file2中删除一行空格和行,并将结果写入output
  • 打印行中的rstrip避免了额外的新行
相关问题