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 元组(Tuple)操作详解
Mar 11 Python
python中的__init__ 、__new__、__call__小结
Apr 25 Python
python使用reportlab实现图片转换成pdf的方法
May 22 Python
Python3.6+Django2.0以上 xadmin站点的配置和使用教程图解
Jun 04 Python
Django如何将URL映射到视图
Jul 29 Python
python爬虫 爬取超清壁纸代码实例
Aug 16 Python
Python Gitlab Api 使用方法
Aug 28 Python
在Django下测试与调试REST API的方法详解
Aug 29 Python
Python如何基于smtplib发不同格式的邮件
Dec 30 Python
Python如何读取文件中图片格式
Jan 13 Python
Python任务调度模块APScheduler使用
Apr 15 Python
python利用google翻译方法实例(翻译字幕文件)
Sep 21 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
基于pear auth实现登录验证
2010/02/26 PHP
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
2015/04/21 PHP
php xhprof使用实例详解
2019/04/15 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
探寻Javascript执行效率问题
2014/11/12 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
微信小程序如何利用getCurrentPages进行页面传值
2019/07/01 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
linux 下实现python多版本安装实践
2014/11/18 Python
Python类属性与实例属性用法分析
2015/05/09 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
python flask框架实现重定向功能示例
2019/07/02 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
Python实现中值滤波去噪方式
2019/12/18 Python
Python可以用来做什么
2020/11/23 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
为你的html5网页添加音效示例
2014/04/03 HTML / CSS
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
WSDL的操作类型主要有几种
2013/07/19 面试题
建筑设计所实习生自我鉴定
2013/09/25 职场文书
企业门卫岗位职责
2013/12/12 职场文书
七年级生物教学反思
2014/01/30 职场文书
迎元旦广播稿
2014/02/22 职场文书
公司中层干部的自我评价分享
2014/03/01 职场文书
奉献家乡演讲稿
2014/09/13 职场文书
2014年学校工作总结
2014/11/20 职场文书
高考学习决心书
2015/02/04 职场文书
ktv服务员岗位职责
2015/02/09 职场文书
Vue的生命周期一起来看看
2022/02/24 Vue.js