我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文的.txt文本转list的问题,还是由机器学习中的CountVectorizer词袋模型所引起的。停用词列表需要一个list格式变量,而停用词列表又基本上都存放在.txt文本文件里面。所以,这里需要对两者做个转化。本文代码的输入是stopwords.txt文本,输出是类型为liststop_words_list变量。

苏南大叔:python读取文本文件,按行分割为list格式的最佳实践 - 按行分割
python读取文本文件,按行分割为list格式的最佳实践(图2-1)

苏南大叔的“程序如此灵动”技术博客,记录苏南大叔的代码经验总结。本文测试环境:win10python@3.11.0。注意:本文的代码里面如果出现了set的字样,就意味着顺序被打乱了,因为set天然无序。

方案一

# rb:代表二进制文件
with open("./stopwords.txt", "rb") as fp:
    stopwords = fp.read().decode("utf-8")
stop_words_list = list(set(stopwords.splitlines()))
print(stop_words_list)

这个方案是先整体读取.txt文本,然后使用基于str类型的.splitlines()进行分割形成数组。

苏南大叔:python读取文本文件,按行分割为list格式的最佳实践 - 文本文件转list
python读取文本文件,按行分割为list格式的最佳实践(图2-2)

方案二

# r:代表文本文件
stop_words_list = []
with open("./stopwords.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()                      # ['苏南大叔\n', '技术博客\n', '北京大学']
    for line in lines:
        stop_words_list.append(line.strip())   # ['苏南大叔', '技术博客', '北京大学']
stop_words_list = list(set(stop_words_list))
print(stop_words_list)

这个方案是本来就是按行读取,只不过是再遍历加工了一次。

方案三

with open("./stopwords.txt", "r", encoding="utf-8") as f:
    lines = f.readlines()
stop_words_list=list(set( [x.strip() for x in lines] ))

和上一个方案差不多,就是写法更简洁了一些。里面使用了推导式的写法,参考:

相关文章

结语

代码最后,先转化为set,再转为list的原因是:利用set天然去重的特性,去掉文本中的重复项目。当然,带来的副作用就是set的天然无序特性。得出的结果可能和原本的设置顺序存在差异。

更多苏南大叔的python经验文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python