看了一段时间的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循环的时候,是会将被循环文件里的数据拿出来的,也就是被循环文件缺少一行。