python 读取两个excel,根据第一列进行合并(不使用pandas)

需求:

        不用 pandas 来实现,两个 excel 根据首列进行合并。

实现:

       平时太依赖第三方包了,这么简单的问题居然在一开始被吓到了。

思路:

       将每一行读取成数组,然后对比数组的第一个值是否相同,相同则合并数组即可。

代码:

# 读取一个文件,每一行用 \t 切割成数组
# 例如:[['1', 'a', 'b'], ['2', 'w', 'r'], ['3', 'q', 'm']]
# 例如:[['3', 'a1', 'b1'], ['2', 'w1', 'r1'], ['1', 'q1', 'm1']]
def readExcel(file_path):
    lines = []
    with open(file_path, 'r', encoding='utf-8') as infile:
        for line in infile:
            lines.append(line.replace('\n', '').split("\t"))
    infile.close()
    return lines

# 将数组输出到文本
# 数组样例:[['1', 'a', 'b', '1', 'q1', 'm1'], ['2', 'w', 'r', '2', 'w1', 'r1'], ['3', 'q', 'm', '3', 'a1', 'b1']]
def writeExcel(arr,outfile):
    out = open(outfile, 'w', encoding='utf-8')
    for line in arr:
        out.write('\t'.join(line))
        out.write('\n')
    out.close()

# 合并数组,根据第一列进行比对,相等值合并
def merge(arr01,arr02):
    lines = []
    for item in arr01:
        for entity in arr02:
            if(item[0] == entity[0]):
                lines.append(item + entity)
    return lines

if __name__ == '__main__':
    excel01 = "F:/JD_work/yu/data/1.txt"
    excel02 = "F:/JD_work/yu/data/2.txt"
    outfile = "F:/JD_work/yu/data/3.txt"
    lines01 = readExcel(excel01)
    lines02 = readExcel(excel02)
    merge01 = merge(lines01, lines02)
    writeExcel(merge01, outfile)
    print(lines01) # 读取第一文件
    print(lines02) # 读取第二个文件
    print(merge01) # 合并后的效果

文件1:

1    a    b
2    w    r
3    q    m

文件2:

3    a1    b1
2    w1    r1
1    q1    m1

文件3:

1    a    b    1    q1    m1
2    w    r    2    w1    r1
3    q    m    3    a1    b1

程序执行效果:

[['1', 'a', 'b'], ['2', 'w', 'r'], ['3', 'q', 'm']]
[['3', 'a1', 'b1'], ['2', 'w1', 'r1'], ['1', 'q1', 'm1']]
[['1', 'a', 'b', '1', 'q1', 'm1'], ['2', 'w', 'r', '2', 'w1', 'r1'], ['3', 'q', 'm', '3', 'a1', 'b1']]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值