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 相关文章推荐
Python3里的super()和__class__使用介绍
Apr 23 Python
python函数装饰器用法实例详解
Jun 04 Python
python用reduce和map把字符串转为数字的方法
Dec 19 Python
利用python获取Ping结果示例代码
Jul 06 Python
Python实现八皇后问题示例代码
Dec 09 Python
创建Shapefile文件并写入数据的例子
Nov 26 Python
Python sys模块常用方法解析
Feb 20 Python
在django admin详情表单显示中添加自定义控件的实现
Mar 11 Python
python等待10秒执行下一命令的方法
Jul 19 Python
Python如何进行时间处理
Aug 06 Python
python中判断数字是否为质数的实例讲解
Dec 06 Python
python用海龟绘图写贪吃蛇游戏
Jun 18 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中,文件上传
2006/12/06 PHP
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
php笔记之:AOP的应用
2013/04/24 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
2020/11/10 PHP
JavaScript类库D
2010/10/24 Javascript
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
JS动态增加删除UL节点LI及相关内容示例
2014/05/21 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
javascript中的作用域和闭包详解
2016/01/13 Javascript
jQuery轻松实现无缝轮播效果
2017/03/22 jQuery
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
JavaScript生成指定范围随机数和随机序列的方法
2018/05/05 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
python使用Berkeley DB数据库实例
2014/09/26 Python
python基于右递归解决八皇后问题的方法
2015/05/25 Python
python基于phantomjs实现导入图片
2016/05/13 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
python 定时器,实现每天凌晨3点执行的方法
2019/02/20 Python
对Python中画图时候的线类型详解
2019/07/07 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
python的数学算法函数及公式用法
2020/11/18 Python
违反学校规定检讨书
2014/01/18 职场文书
最新会计专业求职信范文
2014/01/28 职场文书
公司员工检讨书
2014/02/08 职场文书
2014年科协工作总结
2014/12/09 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
MySQL 不等于的三种使用及区别
2021/06/03 MySQL