Python 比较两个文件的代码是减慢搜索速度以改进代码

Python 比较两个文件的代码是减慢搜索速度以改进代码,python,performance,loops,compare,text-files,Python,Performance,Loops,Compare,Text Files,我不是Python方面的专家,我编写了一个脚本来比较两个文件(地震数据位置)。我写的东西很难看也很慢。 有人有改进我的代码的想法吗?谢谢 #!/usr/bin/env python # -*- coding: utf-8 -*- file_1 = 'Loc_1D.txt' file_2 = 'Loc_3D.txt' output_file = 'result_file.txt' with open(file_1, "r") as f1: for line1 in f1:

我不是Python方面的专家,我编写了一个脚本来比较两个文件(地震数据位置)。我写的东西很难看也很慢。 有人有改进我的代码的想法吗?谢谢

#!/usr/bin/env python
# -*- coding: utf-8 -*-

file_1 = 'Loc_1D.txt'
file_2 = 'Loc_3D.txt'
output_file = 'result_file.txt'

with open(file_1, "r") as f1:
    for line1 in f1:
        yr1, mth1, d1, hr1, m1, s1, lat1, lon1, z1, mag  = line1.split()
        time1 = [yr1, mth1, d1, hr1, m1]
        with open(file_2, "r") as f2:
            for line2 in f2:
                yr2, mth2, d2, hr2, m2, s2, lat2, lon2, z2, *_ = line2.split()
                time2 = [yr2, mth2, d2, hr2, m2]
                with open(output_file, "w") as oup:
                    if time1 == time2 and abs(float(s1)-float(s2)) <= 2:
                        Event = [yr2, mth2, d2, hr2, m2, s2, lat2, lon2, z2, mag]
                        print (Event)
                        oup.write(str(Event))
#/usr/bin/env python
#-*-编码:utf-8-*-
文件_1='Loc_1D.txt'
文件_2='Loc_3D.txt'
输出文件='result\u file.txt'
打开(文件_1,“r”)为f1时:
对于f1中的第1行:
yr1,mth1,d1,hr1,m1,s1,lat1,lon1,z1,mag=line1.split()
时间1=[yr1,mth1,d1,hr1,m1]
打开(文件2,“r”)作为f2:
对于f2中的第2行:
yr2,mth2,d2,hr2,m2,s2,lat2,lon2,z2,*2;=line2.split()
时间2=[yr2,mth2,d2,hr2,m2]
以oup形式打开(输出_文件“w”):

如果time1==time2和abs(float(s1)-float(s2))这与马特的评论类似。假设时间戳在所有情况下都是唯一的,这可能是最有效的解决方案:

file_1 = 'Loc_1D.txt'
file_2 = 'Loc_3D.txt'
output_file = 'result_file.txt'
with open(file_1) as f1:
    f1_data = {}
    for line in f1.read().split("\n"):
        line_data = line.split()
        f1_data["-".join(map(str, line_data[:5]))] = line_data

with open(file_2) as f2:
    f2_data = {}
    for line in f2.read().split("\n"):
        line_data = line.split()
        f2_data["-".join(map(str, line_data[:5]))] = line_data

output_data = []
for data_key in [key for key in f1_data.keys() if key in f2_data.keys()]:
    if abs(float(f1_data[data_key][5])-float(f2_data[data_key][5])) <= 2.0:
        Event = str(f2_data[data_key][5])
        print(Event)
        output_data.append(Event)

with open(output_file, 'w') as f:
    f.write("\n".join(output_data))
file_1='Loc_1D.txt'
文件_2='Loc_3D.txt'
输出文件='result\u file.txt'
打开(文件_1)为f1时:
f1_数据={}
对于f1.read().split(“\n”)中的行:
line_data=line.split()
f1_数据[“-”。连接(映射(str,line_数据[:5]))]=line_数据
打开(文件2)为f2时:
f2_数据={}
对于f2.read().split(“\n”)中的行:
line_data=line.split()
f2_数据[“-”。连接(映射(str,line_数据[:5]))]=line_数据
输出数据=[]
对于数据输入[输入f1_数据.keys()的输入键,如果输入f2_数据.keys()]:

如果abs(浮动(f1_数据[data_key][5])-浮动(f2_数据[data_key][5]))这与Matt的评论类似。假设时间戳在所有情况下都是唯一的,这可能是最有效的解决方案:

file_1 = 'Loc_1D.txt'
file_2 = 'Loc_3D.txt'
output_file = 'result_file.txt'
with open(file_1) as f1:
    f1_data = {}
    for line in f1.read().split("\n"):
        line_data = line.split()
        f1_data["-".join(map(str, line_data[:5]))] = line_data

with open(file_2) as f2:
    f2_data = {}
    for line in f2.read().split("\n"):
        line_data = line.split()
        f2_data["-".join(map(str, line_data[:5]))] = line_data

output_data = []
for data_key in [key for key in f1_data.keys() if key in f2_data.keys()]:
    if abs(float(f1_data[data_key][5])-float(f2_data[data_key][5])) <= 2.0:
        Event = str(f2_data[data_key][5])
        print(Event)
        output_data.append(Event)

with open(output_file, 'w') as f:
    f.write("\n".join(output_data))
file_1='Loc_1D.txt'
文件_2='Loc_3D.txt'
输出文件='result\u file.txt'
打开(文件_1)为f1时:
f1_数据={}
对于f1.read().split(“\n”)中的行:
line_data=line.split()
f1_数据[“-”。连接(映射(str,line_数据[:5]))]=line_数据
打开(文件2)为f2时:
f2_数据={}
对于f2.read().split(“\n”)中的行:
line_data=line.split()
f2_数据[“-”。连接(映射(str,line_数据[:5]))]=line_数据
输出数据=[]
对于数据输入[输入f1_数据.keys()的输入键,如果输入f2_数据.keys()]:

如果abs(浮动(f1_数据[数据_键][5])-浮动(f2_数据[数据_键][5])这是校正,多亏了@Samay Gupta

file_1 = 'Loc_1D.txt'
file_2 = 'Loc_3D.txt'
output_file = 'result_file.txt'

with open(file_1) as f1:
    f1_data = {}
    for line in f1.read().split("\n"):
        line_data = line.split()
        f1_data["-".join(map(str, line_data[:5]))] = line_data

with open(file_2) as f2:
    f2_data = {}
    for line in f2.read().split("\n"):
        line_data = line.split()
        f2_data["-".join(map(str, line_data[:5]))] = line_data

output_data = []
for data_key in [key for key in f1_data.keys() if key in f2_data.keys()]:
    if abs(float(f1_data[data_key][5])-float(f2_data[data_key][5])) <= 2.0:
        Event = f2_data[data_key][:9], f1_data[data_key][9]
        print(Event)
        output_data.append(Event)

with open(output_file, 'w') as f:
    f.write("\n".join(str(output_data)))
file_1='Loc_1D.txt'
文件_2='Loc_3D.txt'
输出文件='result\u file.txt'
打开(文件_1)为f1时:
f1_数据={}
对于f1.read().split(“\n”)中的行:
line_data=line.split()
f1_数据[“-”。连接(映射(str,line_数据[:5]))]=line_数据
打开(文件2)为f2时:
f2_数据={}
对于f2.read().split(“\n”)中的行:
line_data=line.split()
f2_数据[“-”。连接(映射(str,line_数据[:5]))]=line_数据
输出数据=[]
对于数据输入[输入f1_数据.keys()的输入键,如果输入f2_数据.keys()]:

如果abs(浮动(f1_数据[数据_键][5])-浮动(f2_数据[数据_键][5])这是校正,多亏了@Samay Gupta

file_1 = 'Loc_1D.txt'
file_2 = 'Loc_3D.txt'
output_file = 'result_file.txt'

with open(file_1) as f1:
    f1_data = {}
    for line in f1.read().split("\n"):
        line_data = line.split()
        f1_data["-".join(map(str, line_data[:5]))] = line_data

with open(file_2) as f2:
    f2_data = {}
    for line in f2.read().split("\n"):
        line_data = line.split()
        f2_data["-".join(map(str, line_data[:5]))] = line_data

output_data = []
for data_key in [key for key in f1_data.keys() if key in f2_data.keys()]:
    if abs(float(f1_data[data_key][5])-float(f2_data[data_key][5])) <= 2.0:
        Event = f2_data[data_key][:9], f1_data[data_key][9]
        print(Event)
        output_data.append(Event)

with open(output_file, 'w') as f:
    f.write("\n".join(str(output_data)))
file_1='Loc_1D.txt'
文件_2='Loc_3D.txt'
输出文件='result\u file.txt'
打开(文件_1)为f1时:
f1_数据={}
对于f1.read().split(“\n”)中的行:
line_data=line.split()
f1_数据[“-”。连接(映射(str,line_数据[:5]))]=line_数据
打开(文件2)为f2时:
f2_数据={}
对于f2.read().split(“\n”)中的行:
line_data=line.split()
f2_数据[“-”。连接(映射(str,line_数据[:5]))]=line_数据
输出数据=[]
对于数据输入[输入f1_数据.keys()的输入键,如果输入f2_数据.keys()]:

如果abs(float(f1_数据[data_key][5])-float(f2_数据[data_key][5]),则为文件_1中的每一行打开文件_2。打开每个文件一次,并将每行代码解析成两个字典,时间是它们的键。谢谢,我尝试了一些方法,但不起作用,它只写了一行代码(我放在下面),您正在为文件1中的每行代码打开文件2。打开每个文件一次,将每行代码解析成两个字典,并以时间为键。谢谢,我尝试了一些东西,但没有用,它只写了一行(我把它放在下面)非常感谢。它似乎有一个语法错误:
文件“/comp\u time\u test2.py”,第22行为数据输入[key for key f1\u data.keys(),如果输入f2\u data.keys()]:^SyntaxError:无效语法
什么是大的O符号?@OcéF是的,我错过了一个,我更正了代码,现在应该可以工作了。大O符号只是衡量程序效率的一种方法。这是一个估计,但给出了代码将如何运行的好主意(时间和计算机资源的w'.r.t)。这取决于运行时间,较低的n值更有效,速度更快。感谢您提供这些信息。看来还存在一些问题。显然f1.read.split(\n)不能有split属性。`文件“/comp_time_test2.py”,第11行,在f1.read.split(“\n”):AttributeError:“内置函数或方法”对象没有属性“split”`修复了这个问题,我遗漏了几个括号。希望现在能工作,非常感谢。它似乎有一个语法错误:
文件“/comp\u time\u test2.py”,第22行为数据输入[key for key f1\u data.keys(),如果输入f2\u data.keys()]:^SyntaxError:无效语法
什么是大的O符号?@OcéF是的,我错过了一个,我更正了代码,现在应该可以工作了。大O符号只是衡量程序效率的一种方法。这是一个估计,但给出了代码将如何运行的好主意(时间和计算机资源的w'.r.t)。这取决于运行时间,较低的n值更有效,速度更快。感谢您提供这些信息。看来还存在一些问题。显然f1.read.split(\n)不能有split属性。`文件“/comp_time_test2.py”,第11行,在f1.read.split(“\n”):AttributeError:“内置函数或方法”对象没有属性“split”`修复了这个问题,我错过了几个