需求:
不用 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']]