吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1528|回复: 15
收起左侧

[求助] python菜鸟入门求助[已解决]

[复制链接]
ly123 发表于 2020-6-9 10:42
本帖最后由 ly123 于 2020-6-9 11:13 编辑

最近刚开始学Python,跟着做实例的时候和讲课的代码一样但是还是报错,不知道怎么改进,还望大佬指点{:1_936:}
代码:
[Python] 纯文本查看 复制代码
def main():
    f1=open('teleAddressBook.txt','rb')
    f2=open('emailAddressBook.txt','rb')

    f1.readline()
    f2.readline()
    lines1=f1.readlines()
    lines2=f2.readlines()

    dic1=[]
    dic2=[]

    for line in lines1:
        elements = line.split()
        dic1[elements[0]]=str(elements[1].decode('utf-8'))

    for line in lines2:
        elements = line.split()
        dic2[elements[0]]=str(elements[1].decode('utf-8'))

    lines=[]
    lines.append('姓名\t        电话        \t    邮箱\n')

    for key in dic1:
        s=''
        if key in dic2.keys():
                s='\t'.join([str(key.decode('utf-8')),dic1[key],dic2[key]])
                s+='\n'
        else:
                s='\t'.join([str(key.decode('utf-8')),dic1[key],str('----------')])
                s+='\n'
        lines.append(s)

    for key in dic2:
        s=''
        if key not in dic1.keys():
                s='\t'.join([str(key.decode('utf-8')),str('----------'),dic2[key]])
                s+='\n'
        lines.append(s)

    f3=open('AddressBook1.txt','w')
    f3.writelines(lines)

    f3.close()
    f2.close()
    f1.close()
    print('The AddressBooks are merged!')

if __name__ == '__main__':
    main()

-------------------------------------------------------
报错:    dic1[elements[0]]=str(elements[1].decode('utf-8'))
TypeError: list indices must be integers or slices, not bytes
我也查过网上的,说改成int也不行。{:1_924:} 小白不懂应该怎么改,先谢谢各位!

感谢各位,是我太粗心了。字典应该是{},误用了[]。:shutup:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

pzx521521 发表于 2020-6-9 10:55
f1=open('teleAddressBook.txt','rb')->
f1=open('teleAddressBook.txt','r').
不要用二进制读取
 楼主| ly123 发表于 2020-6-9 11:01
pzx521521 发表于 2020-6-9 10:55
f1=open('teleAddressBook.txt','rb')->
f1=open('teleAddressBook.txt','r').
不要用二进制读取

感谢回复,但是又报新错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa2 in position 34: illegal multibyte sequence。   里面有中文名字
jidesheng6 发表于 2020-6-9 11:01
索引的值错了,应该是int类型,考虑一下转换吧。
pzx521521 发表于 2020-6-9 11:03
ly123 发表于 2020-6-9 11:01
感谢回复,但是又报新错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa2 in position 34: ill ...

文件发一下...
XAWAN 发表于 2020-6-9 11:05
dic1=[]
dic2=[]
应该是字典类型才对,用{}(花括号)
你仔细核对实例代码,一定你写错了,包括后面程序的括号,不是二进制的问题
dlwxxxdlw 发表于 2020-6-9 11:06
Python2 吗,Python2 的话在文件最上面把这三行加上试一试:
[Python] 纯文本查看 复制代码
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
 楼主| ly123 发表于 2020-6-9 11:07

姓名          电话号码
王颐茄       13691177890
张三          13529293939
李斯          15811589981
桑迪          13010026896

utf-8编码的
XAWAN 发表于 2020-6-9 11:08
XAWAN 发表于 2020-6-9 11:05
dic1=[]
dic2=[]
应该是字典类型才对,用{}(花括号)

信我,一定是这个问题
dic1={}
dic2={}

免费评分

参与人数 2热心值 +2 收起 理由
johnny.seventh + 1 用心讨论,共获提升!
ly123 + 1 谢谢@Thanks!

查看全部评分

 楼主| ly123 发表于 2020-6-9 11:11
XAWAN 发表于 2020-6-9 11:08
信我,一定是这个问题
dic1={}
dic2={}

解决了,就是{}的问题,是我太粗心了。感谢!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 15:31

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表