Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从文本文件中删除冗余数据_Python_Numpy - Fatal编程技术网

Python 如何从文本文件中删除冗余数据

Python 如何从文本文件中删除冗余数据,python,numpy,Python,Numpy,我已经计算了两个原子之间的距离并保存在out.txt文件中。生成的输出文件如下所示 N_TYR_A0002 O_CYS_A0037 6.12 O_CYS_A0037 N_TYR_A0002 6.12 N_ALA_A0001 O_TYR_A0002 5.34 O_TYR_A0002 N_ALA_A0001 5.34 我的输出文件有重复,意味着相同的原子和相同的距离。 如何删除冗余线路 我使用这个程序计算距离(所有到所

我已经计算了两个原子之间的距离并保存在out.txt文件中。生成的输出文件如下所示

N_TYR_A0002      O_CYS_A0037     6.12    
O_CYS_A0037      N_TYR_A0002     6.12
N_ALA_A0001      O_TYR_A0002     5.34
O_TYR_A0002      N_ALA_A0001     5.34
我的输出文件有重复,意味着相同的原子和相同的距离。
如何删除冗余线路

我使用这个程序计算距离(所有到所有原子)


如果您不关心订单:

def remove_duplicates(input_file):
    with open(input_file) as fr:
        unique = {'\t'.join(sorted([a1, a2] + [d]))
            for a1, a2, d in  [line.strip().split() for line in fr]
        }

    for item in unique:
        yield item

if __name__ == '__main__':
    for line in remove_duplicates('out.txt'):
        print line

但是,在计算距离和写入数据之前,简单地检查脚本中的name1是否好的,我有个主意。不是假装这是最好或最干净的方式,而是很有趣

import numpy as np
from StringIO import StringIO

data_in_file = """
N_TYR_A0002, O_CYS_A0037, 6.12    
N_ALA_A0001, O_TYR_A0002, 5.34
P_CUC_A0001, N_TYR_A0002, 9.56
O_TYR_A0002, N_ALA_A0001, 5.34
O_CYS_A0037, N_TYR_A0002, 6.12
N_TYR_A0002, P_CUC_A0001, 9.56
"""

# Import data using numpy, any method is okay really as we don't really on data being array's
data_in_array = np.genfromtxt(StringIO(data_in_file), delimiter=",", autostrip=True, 
                              dtype=[('atom_1', 'S12'), ('atom_2', 'S12'), ('distance', '<f8')])

N = len(data_in_array['distance'])

pairs = []

# For each item find the repeated index
for index, a1, a2 in zip(range(N), data_in_array['atom_1'], data_in_array['atom_2']):
    repeat_index = list((data_in_array['atom_2'] == a1) * (data_in_array['atom_1'] == a2)).index(True)
    pairs.append(sorted([index, repeat_index]))

# Each item is repeated, so sort and remove every other one
unique_indexs = [item[0] for item in sorted(pairs)[0:N:2]]

atom_1 = data_in_array['atom_1'][unique_indexs]
atom_2 = data_in_array['atom_2'][unique_indexs]
distance = data_in_array['distance'][unique_indexs]

for i in range(N/2):
    print atom_1[i], atom_2[i], distance[i]

#Prints
N_TYR_A0002 O_CYS_A0037 6.12
N_ALA_A0001 O_TYR_A0002 5.34
P_CUC_A0001 N_TYR_A0002 9.56
将numpy导入为np
从StringIO导入StringIO
_文件中的数据_=”“”
N_TYR_A0002,O_CYS_A0037,6.12
N_ALA_A0001,O_TYR_A0002,5.34
P_CUC_A0001,N_TYR_A0002,9.56
O_TYR_A0002,N_ALA_A0001,5.34
O_CYS_A0037,N_TYR_A0002,6.12
N_TYR_A0002,P_CUC_A0001,9.56
"""
#使用numpy导入数据,任何方法都是可以的,因为我们不需要将数据作为数组的
_数组中的数据_=np.genfromtxt(StringIO(_文件中的数据_),分隔符=“,”,autostrip=True,

dtype=[('atom_1','S12'),('atom_2','S12'),('distance','让我们首先尝试避免生成重复项。更改代码的这一部分-

outfile1 = open('pairdistance.txt', 'w')
length = len(spfcord)
for i,m in enumerate(spfcord):
    name1 = m[0]
    cord1 = m[1]
    for n in islice(spfcord,i+1,length):
添加导入:

from itertools import islice

请显示生成此输出的代码。如果要在生成out.txt后删除重复项,请参阅(它将保留顺序)。我想你可能想做的是修改生成out.txt的逻辑,以便省略重复项。我看到了这些代码。但问题是,我的第一列和第二列是变量和交换。所以每次都需要换行。我将添加我的代码。这是一个如何删除向前和向后重复项的问题?即你不知道“我不想显示A->B和B->A,但每条边只显示一个长度?或者它只是简单地取消了输出列表的定义?(由上面链接的解决方案覆盖)这不是反向重复或冗余线的情况。我对所有对象进行了距离计算。所以我的输出是这样的。我想删除重复计算。
from itertools import islice