ly123 发表于 2020-6-9 10:42

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

本帖最后由 ly123 于 2020-6-9 11:13 编辑

最近刚开始学Python,跟着做实例的时候和讲课的代码一样但是还是报错,不知道怎么改进,还望大佬指点{:1_936:}
代码:

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]=str(elements.decode('utf-8'))

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

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

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

    for key in dic2:
      s=''
      if key not in dic1.keys():
                s='\t'.join(])
                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]=str(elements.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 的话在文件最上面把这三行加上试一试:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

ly123 发表于 2020-6-9 11:07

pzx521521 发表于 2020-6-9 11:03
文件发一下...

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

utf-8编码的

XAWAN 发表于 2020-6-9 11:08

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


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

ly123 发表于 2020-6-9 11:11

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

{:1_932:} 解决了,就是{}的问题,是我太粗心了。感谢!
页: [1] 2
查看完整版本: python菜鸟入门求助[已解决]