问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用python读取一个txt里的文件时,怎么去重复?

发布网友 发布时间:2022-05-01 19:56

我来回答

5个回答

懂视网 时间:2022-05-10 10:46

这篇文章主要介绍了关于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"你好")

热心网友 时间:2022-05-10 07:54

用集合,Python里的set 其定义就是一个无序不重复集合。

你可以按单词存入一个集合之中,集合会自动帮你去重的

热心网友 时间:2022-05-10 09:12

定义一个set()
每次读一行内容, 就add进set里面

set1 = set()
file1 = open('***.txt','r')
lines = file1.readlines()
for line in lines:
line = line.rstrip()

set1.add(line)

for set11 in set:
print set11

热心网友 时间:2022-05-10 10:47

for i in set( x for x in open( '1.txt' ).read( ).replace( '\n' ,' ' ).split( ' ' ) if x ):
print( i )

1.txt保存需要筛选的数据

热心网友 时间:2022-05-10 12:38

什么叫重复?追问比如 txt文件是北京 上海 广州 北京 天津 上海 天津
我输入的只想要输出 北京 上海 广州 天津 ,不想要重复的部分

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...的电器到成都,请问一下,那个航空快一些呀,多少/公斤? 前女友和我分手一年之后,出车祸死了,我很高兴,这种心理是不是不... 为什么听到前女友去世的消息,我竟然放声大哭,她很爱我,是我对她腻了... 兰州银行充天然气必须要本行卡吗 从服饰礼仪看中西方文化差异 为什么iqoo11评价那么低? 相机快门线的运用范围 快门线是干什么用的 请问这是什么虫子 还挺硬的 在楼房内 整理箱上面发现的 屋内有木质上... 请问这是什么虫子?家里抓到,2cm左右。坐标北京,昌平,冬季12月,楼房... 新浪微博数据中心独立访客量不是包括自己吗 为什么有时候会是0? 我是新手,请问UG制图坐标标注能否手动指定坐标轴,也就是说要做基准的两坐标轴不是垂直的 UG10.0制图中尺寸怎样标注的像图片这样 微博里的独立访客包括自己吗 求教, Python 怎么去掉重复的词, 下面有例子。 UG制图中怎么定义坐标? 鱼腥草通常什么颜色 UG的工制图有没有办法标注一个点的XY坐标数值 鱼腥草绿叶的好。还是红叶的好 UG10.0制图能像CAD里面那样中心坐标标数吗 ug10.0坐标尺寸怎么用 鱼腥草颜色绿点好还是黄立好? 大家好,请问下我的招牌有5个60厘米长的LED发光字,需要用多少平方的电 店面门头上的发光字的电压是多少的是直流电源还是交流电的 LED发光字招牌每天耗电量大概是多少 理科生学国际金融与贸易,此专业国内最好的大学有哪些?谢谢各位! LED发光字12V300w耗电每小时是多少度? 大学想学金融类的,选文科还是理科?上海对外贸易学院文科有哪些专业?急急急~ 电费计算..店里的广告牌有25根18w的灯管,发光字约为100w左右,求多少度,电费要多少。。求解! 发光字的变压器应调到多少伏? UG6.0 坐标尺寸标注 各位大虾指导下 你好,支付宝实名认证都支持哪些证件呢? UG制图:如何标注复合位置度?3格或者4格的 ug7.5怎么标注坐标尺寸 python多个文本组合后去除重复项 37.为什么要深化供给侧结构性改革,其主要 我国为什么要推进供给侧结构性改革 鱼腥草煮熟以后汤却有一层绿色是什么原因还能吃吗? Python文件中如何除去重复行? 前一行与后一行进行对比的形式_百度知 ... 鱼腥草发青发芽了能吃吗 哈罗顺风车不确认同行其他车主还可以再邀请吗 为什么要深化 供给侧结构性改革 为什么供给侧结构性改革如此重要 指甲上的月牙跟健康程度无关,月牙是什么导致的? 我国强调继续深化供给侧结构性改革是因为什么 指甲上的“半月痕”,究竟代表着什么? 手机wps怎样清除历史记录 为什么要着力推动供给侧改革 “旅行者”宇宙飞船拍的照片 为什么强调推进供给侧结构性改革