先貼部分代碼(后面添完整代碼)
for line in lines1: #獲取第一個(gè)文本中的姓名和電話信息
elements = line.split()
print(elements[0])
##elements[0]輸出為b'\xe8\xae\xb8\xe8\x89\xba\xe8\xb1\xaa'
##用python shell沒有問題
list1_name.append(str(elements[0].decode('utf-8', errors='ignore')))
list1_tele.append(str(elements[1].decode('utf-8', errors='ignore')))
這里我用shell輸出elemets.decoe('utf-8')不會(huì)報(bào)錯(cuò),但是在這里就會(huì)報(bào)錯(cuò)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
我嘗試修改讀取文件時(shí)的代碼, 如
ftele1=open('TeleBook.txt', 'rb')
ftele2=open('EmainBook.txt', 'rb')
改為
ftele1=open('TeleBook.txt', 'r', encoding='utf-8')
ftele2=open('EmainBook.txt', 'r', encoding='utf-8')
依舊同樣的問題報(bào)錯(cuò)
這個(gè)問題我在網(wǎng)上搜尋了很多解決辦法,都不適用,比如在開頭添加
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
發(fā)現(xiàn)這是python2.x的解決辦法,而新的>=python3.4在開頭添加文件頭的方式依舊無效
已經(jīng)整了一個(gè)多小時(shí)了,求各路大神相助幫幫小弟
以下是完整代碼:
def main():
ftele1=open('TeleBook.txt', 'r', encoding='utf-8')
ftele2=open('EmainBook.txt', 'r', encoding='utf-8')
ftele1.readline() #跳過第一行
ftele2.readline()
lines1 = ftele1.readlines()
lines2 = ftele2.readlines()
list1_name = []
list1_tele = []
list2_name = []
list2_email = []
for line in lines1: #獲取第一個(gè)文本中的姓名和電話信息
elements = line.split()
print(elements[0])
##elements[0]輸出為b'\xe8\xae\xb8\xe8\x89\xba\xe8\xb1\xaa'
##用python shell沒有問題
list1_name.append(str(elements[0].decode('utf-8', errors='ignore')))
list1_tele.append(str(elements[1].decode('utf-8', errors='ignore')))
#將文本讀出來的bytes轉(zhuǎn)換為str類型
for line in lines2: #獲取第二個(gè)文本中的姓名和郵箱信息
elements = line.split()
#print(elements)
list2_name.append(str(elements[0].decode('utf-8', errors='ignore')))
list2_email.append(str(elements[1].decode('utf-8', errors='ignore')))
#開始處理
lines = []
lines.append('姓名\t 電話\t 郵箱\n')
#按索引方式遍歷姓名列表1
for i in range(len(list1_name)):
s=''
if list1_name[i] in list2_name:
j = list2_name.index(list1_name[i]) #找到姓名列表1對應(yīng)列表2中國年的姓名索引位置
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)
#處理姓名列表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)
ftele3 = open('AddrBook.txt', 'w')
ftele3.writelines(lines)
ftele3.close()
ftele1.close()
ftele2.close()
print('The AddressBooks are merged!')
if name == '__main__':
main()
main()
姓名 電話號碼
許藝豪 17766060293
張三 14997420187
姓名 郵箱
許藝豪 eahon1995@163.com
王五 971248695@qq.com
python3, 直接改成list1_name.append(elements[0])就可以了:
ftele1=open('a.txt', 'r', encoding='utf-8')
ftele2=open('b.txt', 'r', encoding='utf-8')
ftele1.readline() #跳過第一行
ftele2.readline()
lines1 = ftele1.readlines()
lines2 = ftele2.readlines()
list1_name = []
list1_tele = []
list2_name = []
list2_email = []
for line in lines1: #獲取第一個(gè)文本中的姓名和電話信息
elements = line.split()
print(elements[0])
list1_name.append(elements[0])
list1_tele.append(elements[1])
for line in lines2: #獲取第二個(gè)文本中的姓名和郵箱信息
elements = line.split()
list2_name.append(elements[0])
list2_email.append(elements[1])
#開始處理
lines = []
lines.append('姓名\t 電話\t 郵箱\n')
#按索引方式遍歷姓名列表1
for i in range(len(list1_name)):
s=''
if list1_name[i] in list2_name:
j = list2_name.index(list1_name[i]) #找到姓名列表1對應(yīng)列表2中國年的姓名索引位置
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)
#處理姓名列表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)
ftele3 = open('AddrBook.txt', 'w')
ftele3.writelines(lines)
ftele3.close()
ftele1.close()
ftele2.close()
print('The AddressBooks are merged!')
python2 類似,但是頭上加個(gè)# encoding=utf-8:
# encoding=utf-8
ftele1=open('a.txt', 'rb')
ftele2=open('b.txt', 'rb')
ftele1.readline()
ftele2.readline()
lines1 = ftele1.readlines()
lines2 = ftele2.readlines()
list1_name = []
list1_tele = []
list2_name = []
list2_email = []
for line in lines1:
elements = line.split()
print(elements[0])
list1_name.append(elements[0])
list1_tele.append(elements[1])
for line in lines2:
elements = line.split()
#print(elements)
list2_name.append(elements[0])
list2_email.append(elements[1])
lines = []
lines.append('姓名\t 電話\t 郵箱\n')
for i in range(len(list1_name)):
s=''
if list1_name[i] in list2_name:
j = list2_name.index(list1_name[i])
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('AddrBook.txt', 'w')
ftele3.writelines(lines)
ftele3.close()
ftele1.close()
ftele2.close()
print('The AddressBooks are merged!')北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。