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