天天看點

【Python基礎】1.1.2 多檔案合并操作

語言:Python

IDE:Python.IDE

  1. IPO描述

通過檔案“data1.txt”以及”data2.txt”表述,其中第一個檔案存儲姓名+電話,第二個檔案存儲姓名+郵箱,具體如下圖。 要求建立新的”data.txt”合并上述兩表

【Python基礎】1.1.2 多檔案合并操作

I:輸入檔案

P:處理資料

O:輸出新檔案

  1. 普通源碼段
#初始化工作
    ftele1=open('data1.txt')
    ftele2=open('data2.txt')

    ftele1.readlines()
    ftele2.readlines()

    lines1=ftele1.readlines()
    lines2=ftele2.readlines()

    list1_name=[]
    list1_tele=[]
    list2_name=[]
    list2_email=[]
           
#擷取電話資訊
    for line in lines1:
        elements=line.split()            //去空格
        list1_name.append(str(elements[].decode('gbk')))  
        //中文解碼按照gbk
        //append為添加元素
        list1_tele.append(str(elements[].decode('gbk')))
           
#合并
    lines=[]
    lines.append('姓名\t 電話\t 郵箱\n')    //按索引周遊姓名1
    for i in range(len(list1_name)):
        s=''
        if list_name[i] in list2_name:
            j=list2_name.index(list1_name[i])     //index通過相同的名字索引位置
            s='\t'.join(list1_name[i],list1_tele[i],list2_email[j])
            s+='\n'
        else:
            s='\t'.join(list1_name[i],list1_tele[i],str('    _____   ')
            s+='\n'
        lines.append(s)
           
#處理剩餘姓名及郵箱
    for i in range(len(list2_name)):
        s=''
        if list2_name[i] not in list1_name:
            s='\t'.join(list2_name[i],str('    _____   '),list2_email[i])
            s+='\n'
        lines.append(s)
           
#合并
    ftele3=open(data.txt','w')
    ftele3.writelines(lines)
           
#最終一些小細節
    ftele3.close()
    ftele1.close()
    ftele2.close()
    print("complete!")
main()
           
  1. 字典結構簡化源碼段
#初始化工作
    ftele1=open('data1.txt')
    ftele2=open('data2.txt')

    ftele1.readlines()
    ftele2.readlines()

    lines1=ftele1.readlines()
    lines2=ftele2.readlines()

    dic1={}
    dic2={}          //字典方式儲存
           
#擷取兩個檔案資訊
for line in line1:
    elements=line.split()
    dic1{elements[]}=str(elements[].decode('gbk'))
for line in line2:
    elements=line.split()
    dic2{elements[]}=str(elements[].decode('gbk'))
           
#處理與上文類似
lines=[]
lines.append('姓名\t 電話\t 郵箱\n)

for key in dic1:
    s=''
    if key in dic2.keys():
        s='\t'.join([str(key.decode('gbk')),dic1[key],dic2[key]])
        s+='\n'
    else:
        s='\t'.join([str(key.decode('gbk')),dic1[key],str('   _____   ')])
    lines.append(s)
for key in dic2:
    s=''
    if key not in dic1.keys():
        s='\t'.join([str(key.decode('gbk')),str('   _____   '),dic2[key]])
        s+='\n'
    lines.append(s)
           
#結束
    ftele3=open(data.txt','w')
    ftele3.writelines(lines)
    ftele3.close()
    ftele1.close()
    ftele2.close()
    print("complete!")
main()                               //可以見得字典大大簡化了代碼