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中的wxPython实现最基本的浏览器功能
Apr 14 Python
python多进程共享变量
Apr 06 Python
python中解析json格式文件的方法示例
May 03 Python
在python中安装basemap的教程
Sep 20 Python
python实现批量视频分帧、保存视频帧
May 31 Python
python基于socket进行端口转发实现后门隐藏的示例
Jul 25 Python
Python中利用LSTM模型进行时间序列预测分析的实现
Jul 26 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
Feb 20 Python
Python实现壁纸下载与轮换
Oct 19 Python
详解python爬取弹幕与数据分析
Nov 14 Python
python进行二次方程式计算的实例讲解
Dec 06 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
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
php操作sqlserver关于时间日期读取的小小见解
2009/11/29 PHP
在PHP中养成7个面向对象的好习惯
2010/07/17 PHP
php操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
基于jquery的多功能软键盘插件
2012/07/25 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
js表单验证实例讲解
2016/03/31 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
2016/11/18 Javascript
JavaScript ES6中export、import与export default的用法和区别
2017/03/14 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
2017/09/20 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
详解Django中间件执行顺序
2018/07/16 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
python安装scipy的步骤解析
2019/09/28 Python
Python浮点数四舍五入问题的分析与解决方法
2019/11/19 Python
python图形用户接口实例详解
2019/12/16 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
Python新手学习raise用法
2020/06/03 Python
用python实现名片管理系统
2020/06/18 Python
澳大利亚领先的在线药房:Pharmacy Online(有中文站)
2020/02/22 全球购物
毕业生自我鉴定实例
2014/01/21 职场文书
希特勒经典演讲稿
2014/05/19 职场文书
Oracle中DBLink的详细介绍
2022/04/29 Oracle