读取文件:
fbook1 = open("MOOC PYTHON\TeleAddressBook.txt","rb")
对元素进行解码并添加进列表:
list1_name.append(str(elements[0].decode('gbk')))
报错:
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 8: incomplete multibyte sequence
请问大家如何解决这个无法decode的问题
完整代码(合并两个文件)如下:
fbook1 = open("MOOC PYTHON\TeleAddressBook.txt","rb") # 二进制读取 因为文件中有中文,所以避免乱码用rb
fbook2 = open("MOOC PYTHON\EmailAddressBook.txt","rb")
fbook1.readline() # 跳过第一行
fbook2.readline()
lines1 = fbook1.readlines()
lines2 = fbook2.readlines()
list1_name = [] # 建立空列表来存储姓名电话email
list1_tele = []
list2_name = []
list2_email = []
for line in lines1:
elements = line.split() # 用空格区分的元素
list1_name.append(str(elements[0].decode('gbk'))) # 姓名和电话分别储存临时列表 中文字符进行decode('gbk')解码
list1_tele.append(str(elements[1].decode('gbk')))
for line in lines2:
elements = line.split()
list2_name.append(str(elements[0].decode('gbk'))) # 姓名和电话分别储存临时列表 中文字符进行decode('gbk')解码
list2_email.append(str(elements[1].decode('gbk')))
# 合并处理
lines = []
lines.append('姓名\t 电话\t 邮箱\n') # \t 空格
# 处理列表1
for i in range(len(list1_name)):
s = ''
if list1_name[i] in list2_name:
j = list2_name.index(list1_name) # 找到姓名列表1对应列表2中的姓名的位置序号!
s = '\t'.join([list1_name[i], list1_tele[i], list2_email[j]]) # join([]) 这个[]是干嘛的
s += '\n'
else:
s = '\t'.join([list1_name[i], list1_tele[i], str(' ----- ')])
s += '\n'
lines.append(s)
# 处理列表2中剩下的没有遍历的姓名
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)
# 将新生成的合并数据写入新的文件中
fbook3 = open('MOOC PYTHON\AddressBook.txt','w')
fbook3.writelines(lines)
fbook1.close()
fbook2.close()
fbook3.close()
print('The addressBooks are merged!')