标签: python

Python 截取txt中固定字段并去除重复行

看了一段时间的Python教程,正好前两天群里放出来一个txt文件,我就顺便拿过来练练手。

txt文件简介:

1、每行内容都是重复的

2、内容分段一致,用|分隔开,类似于A|B|C|D|E

需求:取出固定字段,比如A、C、E,并去除重复的行。

思路:

1、重复的内容比较好处理,直接读出一行去到原文件里比较,如果存在,就存放到新的txt文件里。

2、取出固定字段,这个用列表来实现,读出一行,存到列表里。

第一次完整的写代码,比较乱,直接贴上来,有用拿去好了,GITHUB账号还没有申请,先丢这里好了。

import os,sys,time
start=time.time()
os.chdir('d:')
print (os.getcwd())
os.remove('new.txt')
os.remove('final.txt')
f=open('test.txt',encoding='utf-8')
for n in f.readlines():
    m=n.split('|')
    b=open('new.txt','a',encoding='utf-8')
    b.write(str(m[8])+'\t'+str(m[10])+'\t'+str(m[22]))
    #print(m[8],m[10],m[22])
    b.close()
f.close()
c=open('final.txt','a',encoding='utf-8')
h=open('new.txt',encoding='utf-8')
for a in h:
    if a in h:
        c.write(str(a))
c.close()
end=time.time()
print('time used:',end-start)

2020.9.15更新:
因原文件中有个别数据是单行,所以造成上面程序在运行时无法全部整理整个文件。单行不重复文件处于中间,整理后的文件就终止在了这个单行的位置。

这里使用python的set()函数,创建一个非重复的列表,增加一个:

bk=set()
然后循环遍历的代码改成:
for i in h:
if i not in bk:
bk.add(str(i))
c.write(str(i))
意思就是不在bk里面,就添加进bk,然后写进txt里。
这里同时也发现一个问题,python在for循环的时候,是会将被循环文件里的数据拿出来的,也就是被循环文件缺少一行。

打算静下心来,写一些有营养的内容

近几年来,博客内容一直都是不够丰富,而且杂乱。主要是平时比较懒,懒得动手写东西,而且最近,也是有人浮于事的状态,不浮的时候,就更懒得写了。

自从这两天发现SS被墙了之后,更是觉得想要有个正常可以使用的梯子是多么的重要,通常这种可以使用的,都是不能够公开来的,因为一但公开使用过后,被墙只是个时间问题。就比如今天在solidot上看到的文章,中国研究人员利用机器学习识别 Tor 和 Shadowsock 流量,所以,你的SS和Tor已经不是什么靠得住的了,虽然目前获取内容还不可能,但识别和禁止变的非常容易,弄的我去关注HBO权力的游戏近况都不行了。

家里python方面的书也已经买好了,前几个月翻了几个章节,就一直搁在那里了,准备重新再捡起来,多学习学习,以后自己写的代码也是比较方便,以后博客可能会多写些python方面的内容了。