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进阶教程之函数参数的多种传递方法
Aug 30 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
Django实现简单分页功能的方法详解
Dec 05 Python
Python使用smtp和pop简单收发邮件完整实例
Jan 09 Python
pytorch: tensor类型的构建与相互转换实例
Jul 26 Python
Selenium鼠标与键盘事件常用操作方法示例
Aug 13 Python
Python中字符串与编码示例代码
May 20 Python
Python使用贪婪算法解决问题
Oct 22 Python
详解python logging日志传输
Jul 01 Python
OpenCV利用python来实现图像的直方图均衡化
Oct 21 Python
使用Python通过oBIX协议访问Niagara数据的示例
Dec 04 Python
Python中字符串对象语法分享
Feb 24 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数组是否为空的代码
2011/09/08 PHP
基于php和mysql的简单的dao类实现crud操作功能
2014/01/27 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
PHP对象、模式与实践之高级特性分析
2016/12/08 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
JavaScript 值类型和引用类型的初次研究(推荐)
2017/07/19 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
jQuery动态添加li标签并添加属性和绑定事件方法
2018/02/24 jQuery
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
vue悬浮可拖拽悬浮按钮的实例代码
2019/08/20 Javascript
vue 实现单选框设置默认选中值
2019/11/07 Javascript
编写Python脚本来实现最简单的FTP下载的教程
2015/05/04 Python
python 换位密码算法的实例详解
2017/07/19 Python
python 除法保留两位小数点的方法
2018/07/16 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
HTML5 文件上传下载的实例代码
2017/07/03 HTML / CSS
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
市场营销专业推荐信
2013/11/03 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
南极大冒险观后感
2015/06/05 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python