python open 函數的一些坑


(1)路徑問題

open一個同py文件同一個目錄的文件的時候,用以下:

txt = open('/filtered_words.txt','rb')
words = txt.readline()
filtered = []
for word in words:
filtered.append(word)
txt.close()
print(filtered)

會報錯
FileNotFoundError: [Errno 2] No such file or directory: '/filtered_words.txt'

這里寫錯了一個地方,應該寫成
txt = open('filtered_words.txt','rb')
也可利用絕對路徑

txt = open('E:\\python_project\\test\github\\filtered_words.txt','rb')
這樣也不會報錯
用反斜杠,這樣也不會報錯

txt = open('E:/python_project/test/github/filtered_words.txt','rb')

(3)打開文件格式

文檔的內容是漢字,用utf-8格式,如果用rb權限open文件,漢字打印出來會變成數字

txt = open('filtered_words.txt','rb')
words = txt.readline()
打印結果是:
[229, 140, 151, 228, 186, 172, 13, 10]

 

用r權限open會報錯

UnicodeDecodeError: 'gbk' codec can't decode byte 0x98 in position 16: illegal multibyte sequence
在open的時候,加一個編碼

txt = open('filtered_words.txt','r',encoding='UTF-8')
words = txt.readline()
打印出來的結果是
['', '', '\n']

把readline換成read函數,打印結果是

['', '', '\n', '', '', '', '\n', '', '', '']

自行百度了read()、readline()、readlines()的區別,最后代碼整理

txt = open('filtered_words.txt','rb',encoding='UTF-8')
wor = txt.readlines()
filtered = []
for word in wor:
word = word.strip('\n')
filtered.append(word)
print(word)
txt.close()
print(filtered)
打印結果是['北京', '程序員', '公務員']


最終代碼如下:
class senseWord():
def __init__(self):
self.list = []
file = open('filtered_words.txt','r',encoding='UTF-8')
words = file.readlines()
for word in words:
word = word.strip('\n')
self.list.append(word)

def checkwords(self,str):
if str in self.list:
return True
else:
return False


if __name__ == '__main__':
sense = senseWord()
str = input('input a string')
if sense.checkwords(str) == True:
print('freedom')
else:

 

————————————————


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM