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基于mysql实现的简单队列以及跨进程锁实例详解
Jul 07 Python
Python实现的检测网站挂马程序
Nov 30 Python
不要用强制方法杀掉python线程
Feb 26 Python
利用python模拟sql语句对员工表格进行增删改查
Jul 05 Python
python与C互相调用的方法详解
Jul 14 Python
Python判断文件和字符串编码类型的实例
Dec 21 Python
解决pycharm工程启动卡住没反应的问题
Jan 19 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 Python
python元组和字典的内建函数实例详解
Oct 22 Python
python 爬取疫情数据的源码
Feb 09 Python
Python如何实现小程序 无限求和平均
Feb 18 Python
python四种出行路线规划的实现
Jun 23 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
php 问卷调查结果统计
2015/10/08 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
JavaScript中split与join函数的进阶使用技巧
2016/05/03 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
Node.js实现注册邮箱激活功能的方法示例
2018/03/23 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
jQuery擦除插件eraser使用方法详解
2020/01/11 jQuery
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
js验证账户名是否重复
2020/05/26 Javascript
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
HTML中使用python屏蔽一些基本功能的方法
2017/07/07 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
python 实现线程之间的通信示例
2020/02/14 Python
python 爬虫如何正确的使用cookie
2020/10/27 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
人事专员工作职责
2014/02/22 职场文书
党员转正大会主持词
2015/07/02 职场文书
销售人员管理制度
2015/08/06 职场文书
python 实现两个变量值进行交换的n种操作
2021/06/02 Python
Nginx限流和黑名单配置
2022/05/20 Servers