python文本去重函数_python3.4.3下逐行读入txt文本并去重的方法

读写文件时应注意的问题包括:

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()

结果:

去重前:

去重后(无序):

去重后(有序):

总结

这段下程序涉及文件读写操作以及链表list的操作,文章开头提到的几个问题,由于并没有使用中文,所以不关心编码,但这里还是要提一提:

f = open("test.txt","w")

f.write(u"你好")

上面这段代码如果在python2中运行会报错

报错是因为程序没办法直接保存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文本并去重的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持萬仟网。

希望与广大网友互动??

点此进行留言吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt中标绘功能的实现方法对比

使用Qt开发桌面程序,经常会有标绘的需求,一般有以下几点: 新建:圆、矩形、椭圆、文字标注,插入图像等;编辑:指对已标绘内容的属性编辑修改功能;删除:指对已标绘内容的删…

【转】PE文件结构详解--(完整版)

(一)基本概念 PE(Portable Execute)文件是Windows下可执行文件的总称,常见的有DLL,EXE,OCX,SYS等,事实上,一个文件是否是PE文件与其扩展名无关,P…

sap 订单状态修改时间_SAP中对于获取订单的状态

在SAP中对于如何获取订单的状态,提供了至少两个函数,分别是 STATUS_READ 和 STATUS_TEXT_EDIT。下面简单介绍这两个函数1.STATUS_READ 改函数的实现原理大概是通过订单的对象好(OR订单号) 到JEST中取出字段STAT INACT.JEST表中STAT是一串从字面看不出…

【转】%~dp0是什么意思

转载自 www.cnblogs.com/yxsylyh 转载内容如下: cd /D %~dp0的意思如下: 更改当前目录为批处理本身的目录 比如你有个批处理a.bat在D:\qq文件夹下 a.bat内容为 cd /d %~dp0 在这里 cd /d %~dp0的意思就是cd /d d:\qq %0代表批处理本身 d:\qq\a.b…

AutoCode For XML(XML解析代码生成器)发布

项目地址 AutoCode For XML on Gitee bug反馈、意见建议 bug反馈、意见建议请直接在此项目主页上进行! 版本更新 AutoCode For XML v1.0.0发布啦! 第一个发行版本,主要用于测试。 下载地址:点我 本工具由Qt未来工程师原创发布。…

wince投屏苹果手机_怎么把手机上的导航映射到中控屏

展开全部第一种:通过MHL线进行手机屏幕和车载屏幕连62616964757a686964616fe78988e69d8331333431353366接实现这种连接方式,必须满足三个条件:一是手机需要支持MHL功能,目前大多数安卓智能手机均具备这一功能;二是车上…

【转】逆变与协变详解

逆变(contravariant)与协变(covariant)是C#4新增的概念,许多书籍和博客都有讲解,我觉得都没有把它们讲清楚,搞明白了它们,可以更准确地去定义泛型委托和接口,这里我尝试画…

设计模式(二)设计模式的本质

简介 设计模式是计算机前辈们,总结项目开发成败经验,得出的一套最佳实践理论。它并不是高高在上、不切实际的理论,而是具体到代码编写层面的指导理论。 从学习编写代码开始,我们就被教导,要写高内聚、低耦合、可复用…

angular设置referer_Angular-cli 构建应用的一些配置

Angular-cli 构建应用的一些配置标签(空格分隔): Angular直接使用 ng build --prod --build-optimizer --base-href/ 来发布base-href可以设置服务器上的某个子路径,使用 ng build --base-href/my/path/如果打包静态文件(js和css)不放在和index.html同一…

设计模式(三)创建型模式

前言 根据菜鸟教程的目录,我们首先来看看创建型模式。 创建型模式研究: 实际应用中通常有哪些不同的创建对象的场景;在不同的场景下,如何更好地编写创建对象的代码。主要研究构造函数。 下面分别对创建型模式下的各种具体模式进…

CSDN改版,找不到各种入口,链接放下面

https://mp.csdn.net/console/article?spm1010.2135.3001.5128 https://mp.csdn.net/console/column/allColumnList 分类管理 https://mp.csdn.net/console/article 文章管理 https://mp.csdn.net/console/upDetailed 资源管理 https://mp.csdn.net/editor/html?spm1011.…

python中pca算法_python实现PCA算法01

python实现PCA算法Software version: Python 2.7.12 |Anaconda 4.2.0 (64-bit)|法1. 编程一步一步实现法2. sklearn我们以定义函数的形式来一步一步进行1.1 导入模块:Numpy,Pandas# -*- coding: utf-8 -*-# Time : 2017/8/17 14:20# Author :…

设计模式(一)预备知识

前言 学习设计模式需要有面向对象编程的基础,要基本掌握一种面向对象的编程语言。关于面向对象编程思想,我们有另外一篇文章专门讲解:面向过程和面向对象的联系和区别。 知识点 虚函数 在类的成员函数定义中,形式上为定义为vir…

【转】GitHub 从单机到联机:玩转 Pull Request

最近在参与一个叫 Exercism 的项目,这是一个由 GitHub 生态工程师 Katrina Owen 发起的编程练习社区,提供了超过50门语言的练习。作为用户,你仅需使用命令行工具即可下载和提交练习,提交后还可以和社区中其他学习者交流讨论。 Exe…

android cmake 打印_Android使用CMAKE编译libjpeg

本文主要介绍使用 CMAKE 编译 libjpeg-turbo 类库,本文相关代码请在GitHub-TurboJpegSample 查看。libjpeg-turbo 附GitHub 地址,libjpeg-turbo 是个运用极其广泛的库,可以说,基本上电脑上手机上能见到的 JPEG 压缩的地方用的一般…

设计模式(四)结构型模式

前言 结构型设计模式,主要研究: 主要有哪些场景使用结构型设计模式;每种场景应该使用何种设计模式;以程序中的功能为核心,研究程序功能的组织结构。所以这一章,我们要把“功能结构”作为研究的核心。 下…

centos 删除crontab_centos下crontab的使用

4.cron文件语法:分 小时 日 月 星期 命令0-59 0-23 1-31 1-12 0-6 command (取值范围,0表示周日一般一行对应一个任务)5.记住几个特殊符号的含义:“*”代表取值范围内的数字,“/”代表”每”,“-”代表从某个数字到某个数字,“,”分开…

【转】GitHub客户端操作1--仓库相关操作github团队协作流程

1、创建仓库 点击“”,点击Create,然后填写Name为my,点击Create repository,即可创建一个my仓库 2、从本地仓库存放位置,添加test仓库到GitHub客户端 点击“”,点击Add,然后点击Browse,选择仓库存放位置&a…

音视频相关链接

开发库 FFmpeg FFmpeg官网 FFmpeg github 平台相关 DirectShow DirectShow简介 DirectShow官网

【转】GitHub客户端操作2--分支操作

简单分支操作 (1)创建新分支:my分支 备注:新创建的分支:my分支里面的内容是和master分支里面的内容是完全一样的。 (2)删除my分支 (3)修改my分支【在my分支上进行项目内…