查找文件中的所有特定字符串,并获得最高值

时间:2017-07-27 05:35:15

标签: python list max min

好的,所以我找不到合适的标题,所以我会尽力解释。

我有一个由名称构成的另一个文件的数据制作的列表,例如,我们可以使用list = ['AAA','BBBB','CCCC','DDDD']之类的内容。我想在另一个文件中搜索该列表的所有元素,以及包含它们的所有行。让我们说我的txt文件看起来像这样。

    PIN |Direction |MaxUp     |MaxDn     |MinUp     |MinDn     |Net                                                                             
   AAA  |  IN      |0.46      |0.039     | -0.006   |0.009     | Top/AAA
   AAA  |  IN      |-0.015    |-0.020    |  0.016   |0.030     | Top1/AAA
   AAA  |  IN      |0.029     |0.019     | -0.006   |0.009     | Top2/AAA
   AAA  |  IN      |0.036     |0.029     | -0.006   |0.009     | Top3/AAA 

所以我的代码如下:

for string in list:
    with open('Text.txt') as file:
         for lines in file:
              if string in lines:
                  #Get all lines
                  #Get the line with the highest maxup and Maxdn

进程的输出应该显示我们当前正在查看的字符串的所有行:

它应该显示在这种情况下持有AAA的所有4行,然后它将只获得具有最高MaxUp和MaxDn的输出,因此输出应为:

    PIN |Direction |MaxUp     |MaxDn                                                                               
   AAA  |  IN      |0.46      |0.039

我对我应该做的事情有一个大概的想法,但这个过程需要很长时间,因为我在for循环中打开一个文件似乎对我来说有点不对。

1 个答案:

答案 0 :(得分:0)

首先我们应该清理数据,这意味着删除所有"https://graph.windows.net/$mytenantname/users?`$top=999?api-verion=1.6" 个字符以及空格。现在我们将以可用的格式(python列表)提供数据。这意味着我们可以非常容易地比较每列的值。

所以我们通过遍历搜索项列表中的每个字符串开始搜索行,然后对于我们拥有的每一行数据,我们检查字符串是否在行中,如果是,我们检查看看如果它打破了任何记录,然后我们记录它。 注意:我已将list的名称更改为li,因为list是python内置的

|

根据您的数据,我得到以下结果:

li = ['AAA', 'BBBB', 'CCCC', 'DDDD']

lines = []
first = True
with open('Text.txt') as file:
    for line in file:
        if first:
            first = False
            continue
        lines.append([x.strip() for x in line.split('|')])

for string in li:
    print('Lines containing', string, ':')
    maxUp = None
    maxDn = None
    for line in lines:
        if string in line:
            if maxUp is None and maxDn is None:
                maxUp = line
                maxDn = line
            print(line)
            if line[2] >= maxUp[2]:
                maxUp = line
            if line[3] >= maxDn[2]:
                maxDn = line
    print()
    print('maxUp:', maxUp)
    print('maxDn:', maxDn)
    print()