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之多线程爬虫抓取网页图片的示例代码
Jan 10 Python
Python网络编程之TCP套接字简单用法示例
Apr 09 Python
Flask入门之上传文件到服务器的方法示例
Jul 18 Python
python机器学习之神经网络实现
Oct 13 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
Python设计模式之工厂方法模式实例详解
Jan 18 Python
Python 多维List创建的问题小结
Jan 18 Python
python中实现控制小数点位数的方法
Jan 24 Python
在Python文件中指定Python解释器的方法
Feb 18 Python
Django+zTree构建组织架构树的方法
Aug 21 Python
jupyter notebook 参数传递给shell命令行实例
Apr 10 Python
如何利用python发送邮件
Sep 26 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
用PHP调用数据库的存贮过程
2006/10/09 PHP
php仿discuz分页效果代码
2008/10/02 PHP
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
2019/03/07 PHP
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
js购物车实现思路及代码(个人感觉不错)
2013/12/23 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
nuxt+axios实现打包后动态修改请求地址的方法
2020/04/22 Javascript
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
英国家电购物网站:Sonic Direct
2019/03/26 全球购物
英文求职信范文
2014/05/23 职场文书
教师专业自荐信
2014/05/31 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
校长师德表现自我评价
2015/03/05 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
2016年“9.22”世界无车日活动小结
2016/04/05 职场文书
教师节作文之小学四年级
2019/09/03 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python