注册 登录
编程论坛 Python论坛

自己写的求两个文件不同行python,速度很慢,求大神指点一下

liyibo0719 发布于 2019-09-17 02:57, 2245 次点击
附件是我写的一个代码,第一个文件只有一列,第二个文件有很多列,我想打印出所有文件2的第一列在文件一种找不到的行,我写的这个可以运行,但是由于文件非常非常的大,太慢太慢了

求大神指点。
只有本站会员才能查看附件,请 登录
8 回复
#2
fall_bernana2019-09-17 09:50
回复 楼主 liyibo0719
我能给的建议是:
1.第一个文件的内容存成set.这个查询的要比list快
2.第二个文件的里的文件输出不要在循环的时候用open.这相当于反复的打开文件句柄,你可以放到外面.里面只使用write.也可以比如处理完1000个输出一次
3.可以把第二个文件拆分成多个文件,同时处理
4.使用多线程来处理.这个主要是IO的瓶颈.
希望对你有帮助

[此贴子已经被作者于2019-9-17 10:39编辑过]

#3
liyibo07192019-09-17 11:05
回复 2楼 fall_bernana
谢谢你的建议!
那在 if b[0] not in a:  后面 要怎么存储符合要求的数据呢?
#4
fall_bernana2019-09-17 11:19
回复 3楼 liyibo0719
连接成一个字符串输出就可以.
#5
liyibo07192019-09-17 11:26
回复 3楼 liyibo0719
能说的详细一点吗?我刚刚入门,不是很懂。
#6
fall_bernana2019-09-17 11:42
回复 5楼 liyibo0719
把你的代码发成文字的.别发图片.
#7
liyibo07192019-09-17 22:56
回复 6楼 fall_bernana
a=[]
with open("inter_0.16.txt", 'r') as f:
    while True:
        lines = f.readline()
        #print (lines)
        if not lines:
            break
        a=set(lines.rstrip())
        #print(a)

with open ("tmp0.txt", 'r') as f1:
    while True:
        lines = f1.readline()
        if not lines:
            break
        b=lines.rstrip()
        b=b.split()
        if b[0] not in a:
            with open("uniq_read.txt",'a+') as f2:
                f2.write('{}\t{}\t{}\t{}\t{}\n'.format(b[0],b[1],b[2],b[3],b[9]))
#8
fall_bernana2019-09-18 17:56
回复 7楼 liyibo0719
程序代码:

a=set()
with open("inter_0.16.txt", 'r') as f:
    while True:
        lines = f.readline()
        #print (lines)
        if not lines:
            break
        a.add(lines.strip())
        #print(a)
with open("uniq_read.txt",'a+') as f2:
    outstring=""
    outcount=0
    with open ("tmp0.txt", 'r') as f1:
        while True:
            lines = f1.readline()
            if not lines:
                break
            b=lines.rstrip()
            b=b.split()
            if b[0] not in a:
                outstring+='{}\t{}\t{}\t{}\t{}\n'.format(b[0],b[1],b[2],b[3],b[9])
                outcount++
                if outcount>1000:
                    f2.write(outstring)
                    outstring=""
                    outcount=0


[此贴子已经被作者于2019-9-19 09:30编辑过]

#9
liyibo07192019-09-23 23:00
回复 8楼 fall_bernana
非常感谢!!!
1