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.0 字典key排序
Dec 24 Python
PYTHON 中使用 GLOBAL引发的一系列问题
Oct 12 Python
python与php实现分割文件代码
Mar 06 Python
Python实现的远程登录windows系统功能示例
Jun 21 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
PyCharm配置mongo插件的方法
Nov 30 Python
Python求平面内点到直线距离的实现
Jan 19 Python
keras.utils.to_categorical和one hot格式解析
Jul 02 Python
Python 如何创建一个简单的REST接口
Jul 30 Python
python 如何调用远程接口
Sep 11 Python
python实现简单文件读写函数
Feb 25 Python
Python 如何实现文件自动去重
Jun 02 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/11/25 PHP
php 购物车实例(申精)
2009/05/11 PHP
php调用mysql数据 dbclass类
2011/05/07 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
几行代码轻松实现PHP文件打包下载zip
2017/03/01 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
jQuery 表单验证插件formValidation实现个性化错误提示
2009/06/23 Javascript
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
JS表单数据验证的正则表达式(常用)
2017/02/18 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
很酷的python表白工具 你喜欢我吗
2019/04/11 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
2019/08/14 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
Python文件操作基础流程解析
2020/03/19 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
利用python绘制正态分布曲线
2021/01/04 Python
python中四舍五入的正确打开方式
2021/01/18 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
汇科协同Java笔试题
2012/03/31 面试题
环保建议书
2014/03/12 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
团日活动总结
2014/04/28 职场文书
网吧消防安全责任书
2014/07/29 职场文书
机器人瓦力观后感
2015/06/12 职场文书
六五普法心得体会2016
2016/01/21 职场文书
护士业务学习心得体会
2016/01/25 职场文书
基于Python实现流星雨效果的绘制
2022/03/18 Python