分享

初学python,使用open函数的路径一些坑

 hdzgx 2020-01-05

做一个小练习:敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights。

  1. 北京
  2. 程序员
  3. 公务员

(1)路径问题

open一个同py文件同一个目录的文件的时候,用以下:

  1. txt = open('/filtered_words.txt','rb')
  2. words = txt.readline()
  3. filtered = []
  4. for word in words:
  5. filtered.append(word)
  6. txt.close()
  7. 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文件,汉字打印出来会变成数字

  1. txt = open('filtered_words.txt','rb')
  2. 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的时候,加一个编码

  1. txt = open('filtered_words.txt','r',encoding='UTF-8')
words = txt.readline()

打印出来的结果是

['北', '京', '\n']

把readline换成read函数,打印结果是

['北', '京', '\n', '程', '序', '员', '\n', '公', '务', '员']

自行百度了read()、readline()、readlines()的区别,最后代码整理

  1. txt = open('filtered_words.txt','rb',encoding='UTF-8')
  2. wor = txt.readlines()
  3. filtered = []
  4. for word in wor:
  5. word = word.strip('\n')
  6. filtered.append(word)
  7. print(word)
  8. txt.close()
  9. print(filtered)
打印结果是['北京', '程序员', '公务员']


最终代码如下:
  1. class senseWord():
  2. def __init__(self):
  3. self.list = []
  4. file = open('filtered_words.txt','r',encoding='UTF-8')
  5. words = file.readlines()
  6. for word in words:
  7. word = word.strip('\n')
  8. self.list.append(word)
  9. def checkwords(self,str):
  10. if str in self.list:
  11. return True
  12. else:
  13. return False
  14. if __name__ == '__main__':
  15. sense = senseWord()
  16. str = input('input a string')
  17. if sense.checkwords(str) == True:
  18. print('freedom')
  19. else:
  20. print('human rights')




                                    

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多