python3.4.3下逐行读入txt文本并去重的方法


Posted in Python onApril 29, 2018

读写文件时应注意的问题包括:

1.字符编码

2.操作完成即时关闭文件描述符

3.代码兼容性

几种方法:

#!/bin/python3
original_list1=[" "]
original_list2=[" "]
original_list3=[" "]
original_list4=[" "]
newlist1=[" "]
newlist2=[" "]
newlist3=[" "]
newlist4=[" "]
newtxt1=""
newtxt2=""
newtxt3=""
newtxt4=""
#first way to readline
f = open("duplicate_txt.txt","r+")    # 返回一个文件对象  
line = f.readline()           # 调用文件的 readline()方法 
while line:  
  original_list1.append(line)          
  line = f.readline()  
f.close() 
#use "set()" remove duplicate str in the list
# in this way,list will sort randomly
newlist1 = list(set(original_list1))
#newlist1 = {}.fromkeys(original_list1).keys() #faster 
#rebuild a new txt 
newtxt1="".join(newlist1)
f1 = open("noduplicate1.txt","w")
f1.write(newtxt1)
f1.close()
###################################################################
#second way to readline
for line in open("duplicate_txt.txt","r+"):  
  original_list2.append(line)
newlist2 = list(set(original_list2))
newlist2.sort(key=original_list2.index)         #sort
#newlist2 = sorted(set(original_list2),key=l1.index)  #other way
newtxt2="".join(newlist2)
f2 = open("noduplicate2.txt","w")
f2.write(newtxt2)
f2.close()
###################################################################
#third way to readline
f3 = open("duplicate_txt.txt","r")  
original_list3 = f3.readlines()       #读取全部内容 ,并以列表方式返回 
for i in original_list3:          #遍历去重
  if not i in newlist3:
      newlist3.append(i)
newtxt3="".join(newlist3)
f4 = open("noduplicate3.txt","w")
f4.write(newtxt3)
f4.close()
###################################################################
#fourth way
f5 = open('duplicate_txt.txt',"r+") 
try: 
  original_list4 = f5.readlines() 
  [newlist4.append(i) for i in original_list4 if not i in newlist4]
  newtxt4="".join(newlist4)
  f6 = open("noduplicate4.txt","w")
  f6.write(newtxt4)
  f6.close()
finally: 
  f5.close()

结果:

去重前:

python3.4.3下逐行读入txt文本并去重的方法

去重后(无序):

python3.4.3下逐行读入txt文本并去重的方法

去重后(有序):

python3.4.3下逐行读入txt文本并去重的方法

总结

这段下程序涉及文件读写操作以及链表List的操作,文章开头提到的几个问题,由于并没有使用中文,所以不关心编码,但这里还是要提一提:

f = open("test.txt","w")
f.write(u"你好")

上面这段代码如果在python2中运行会报错

python3.4.3下逐行读入txt文本并去重的方法

报错是因为程序没办法直接保存unicode字符串,要经过编码转换成str类型的二进制字节序列才可以保存。

write()方法会自动编码转换,默认使用ascii编码格式,而ascii不能处理中文,所以出现UnicodeEncodeError。

正确方式是在调用write()方法前,手动格式转换,用utf-8或者gbk转换成str。

f = open("test.txt","w")
text=u"你好"
text=text.encode(encoding='utf-8')
f.write(text)

关于close()问题:

不关闭会有什么影响呢?操作完成后,不关闭文件,会对系统资源造成浪费,因为系统可打开的文件描述符数量是有限的。Linux是65535。

一般来说close之后就OK了,但是也会存在特殊情况,比如说,在调用open()函数时就已经发生错误,权限不足,调用close()肯定报错。还有一种是在write()时,如果磁盘空间不足,报错,close()就没有机会执行了。正确的做法就是使用 try except 对异常进行捕获:

f = open("test.txt","w")
try:
  text=u"你好"
  text=text.encode(encoding='utf-8')
  f.write(text)
except: IOError as e:
  print("oops,%s"%e.args[0])
finally:
  f.close()

更优雅的写法是用 with…as。

with open("test.txt","w") as f:
  text=u"你好"
  f.write(text.encode(encoding='utf-8'))

文件对象实现上下午管理器协议,程序进入with语句时,会把文件对象赋值给变量f,在程序退出with时会自动的调用close()方法。

关于兼容性问题:

python2和python3的open()函数是不一样的,后者可以在函数中指定字符编码格式。

如何解决python2和python3的兼容open()问题呢?

使用io模块下的open()函数,python2中的io.open等价与python3的open函数

from io import open
with open("test.txt","w",encoding='utf-8') as f:
  f.write(u"你好")

以上这篇python3.4.3下逐行读入txt文本并去重的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用Python中的mock库对Python代码进行模拟测试
Apr 16 Python
Python的ORM框架中SQLAlchemy库的查询操作的教程
Apr 25 Python
详解Python装饰器由浅入深
Dec 09 Python
Python实现在某个数组中查找一个值的算法示例
Jun 27 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
Python爬虫实现“盗取”微信好友信息的方法分析
Sep 16 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
django实现模型字段动态choice的操作
Apr 01 Python
使用Python项目生成所有依赖包的清单方式
Jul 13 Python
PyCharm常用配置和常用插件(小结)
Feb 06 Python
python在协程中增加任务实例操作
Feb 28 Python
Python使用re模块实现信息筛选的方法
Apr 29 #Python
Python排序算法之选择排序定义与用法示例
Apr 29 #Python
Python实现的直接插入排序算法示例
Apr 29 #Python
Python实现的堆排序算法示例
Apr 29 #Python
Python中实现变量赋值传递时的引用和拷贝方法
Apr 29 #Python
分享一下Python数据分析常用的8款工具
Apr 29 #Python
Python随机函数random()使用方法小结
Apr 29 #Python
You might like
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
struts2+jquery组合验证注册用户是否存在
2014/04/30 Javascript
借助javascript代码判断网页是静态还是伪静态
2014/05/05 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
js继承实现方法详解
2016/12/16 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
Python中声明只包含一个元素的元组数据方法
2014/08/25 Python
Python文件处理
2016/02/29 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
一看就懂得Python的math模块
2018/10/21 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
2020/06/14 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
耐克巴西官方网站:Nike巴西
2016/08/14 全球购物
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
《母鸡》教学反思
2014/02/25 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
建筑工地门卫岗位职责
2014/04/30 职场文书
银行授权委托书样本
2014/10/13 职场文书
工伤私了协议书范本
2014/11/24 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
红高粱观后感
2015/06/10 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python