在制表符分隔的数组中搜索特定值的列

时间:2017-09-15 12:37:29

标签: python jupyter-notebook

所以我试图使用" column_matches"用于搜索包含数据的txt文件的函数,该数据已存储到数组中,用于列中的特定值,然后打印包含该值的行。

我现在的代码看起来像这样:

f = open( r'file_directory' )
a = []
for line in f:
    a.append(line)

def  column_matches(line, substring, which_column):  
         for line in a:
             if column_matches(line, '4', 6):
                print (line) 
             else: 
                print('low multiplicity')

在这个例子中,我试图在第7列搜索值4.但是,这当前没有打印任何内容。 我是一名初学程序员,所以这可能是非常错误的,但我会喜欢一些反馈意见,因为我无法从其他人的问题中解决这个问题。 理想情况下,程序应搜索所有行并使用特定列中的特定值打印(或保存)每一行!

编辑:示例输入:

K00889.01 0.9990 8.884922995 10.51 0.114124 89.89 1 153 0.8430 0.8210

K01009.01 0.0000 5.09246539 1.17 0.014236 89.14 1 225 0.7510 0.7270

1 个答案:

答案 0 :(得分:0)

您现有的功能实际上没有任何逻辑来处理您尝试搜索的情况。实际上,你有if column_matches(line, '4', 6): 内部这个名为column_matches的函数,所以你暗示它必须调用自己才能确定要采取什么行动...这在逻辑上只是形成一个无限循环(虽然在你的情况下,没有实际运行)。

这应该与您现有的方法类似,但应该按照您的意愿行事。它应该对您的实际文件结构具有相对的弹性,但如果它抛出错误,请告诉我。

data = []
with open('example.txt', 'r') as infile:
    # Will automatically close the file once you're done reading it
    for row in infile:
        data.append(row.replace('\n', '').split())


def column_matches(line, target, column_index):
    try:
       file_data = int(line[column_index])
       if file_data == target:
           return True
       else:
           return False
    except ValueError:
        print('Not a valid number: {}'.format(line[column_index]))
        return False

matching_rows = [] # To store items in data that meet our criteria
for line in data:
    if column_matches(line, 4, 6): 
        matching_rows.append(line) # Function has to return True for this to happen