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正则表达式教程之一:基础篇
Mar 02 Python
Python加密方法小结【md5,base64,sha1】
Jul 13 Python
Python基础之getpass模块详细介绍
Aug 10 Python
Django框架实现的简单分页功能示例
Dec 04 Python
python 读取鼠标点击坐标的实例
Dec 29 Python
对python 调用类属性的方法详解
Jul 02 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
Python绘制热力图示例
Sep 27 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
python3.6中anaconda安装sklearn踩坑实录
Jul 28 Python
python实现梯度下降算法的实例详解
Aug 17 Python
Pycharm github配置实现过程图解
Oct 13 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实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
基于PHP实现商品成交时发送短信功能
2016/05/11 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
JavaScript面向对象编程
2008/03/02 Javascript
关于IE浏览器以及Firefox下的javascript冒泡事件的响应层级
2010/10/14 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
[49:54]Ti4 循环赛第三日 LGD vs Titan
2014/07/12 DOTA
Python ZipFile模块详解
2013/11/01 Python
python字符串连接的N种方式总结
2014/09/17 Python
python通过yield实现数组全排列的方法
2015/03/18 Python
Python数据结构之翻转链表
2017/02/25 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
python Tensor和Array对比分析
2020/01/08 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
装潢设计实习自我鉴定
2013/09/19 职场文书
公司成立感言
2014/01/11 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
设计顾问服务计划书
2014/05/04 职场文书
党校党性分析材料
2014/12/19 职场文书
任命书怎么写
2015/03/02 职场文书
暑期社会实践个人总结
2015/03/06 职场文书
创业计划书之面包店
2019/09/12 职场文书
python开发人人对战的五子棋小游戏
2022/05/02 Python
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android