查找文件中的所有特定字符串,并从该行中获取最高值

Finding all specific strings in a file, and get the highest value out of the line

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

我有一个由另一个文件的数据制成的列表,该文件由名称组成,让我们以这样的文件为例 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 循环中打开一个文件对我来说似乎有点不对。

首先我们应该清理数据,这意味着删除所有 | 字符以及空格。现在我们将获得可用格式的数据,即 python 列表。这意味着我们可以很容易地比较每一列的值。

所以我们通过遍历搜索词列表中的每个字符串开始搜索行,然后对于我们拥有的每一行数据,我们检查字符串是否在行中,如果是,我们检查看看它是否打破了任何记录,然后我们记录下来。 注意:我已将列表的名称更改为 li,因为列表是 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()

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

Lines containing AAA :
['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']

maxUp: ['AAA', 'IN', '0.46', '0.039', '-0.006', '0.009', 'Top/AAA']
maxDn: ['AAA', 'IN', '0.46', '0.039', '-0.006', '0.009', 'Top/AAA']

Lines containing BBBB :

maxUp: None
maxDn: None

Lines containing CCCC :

maxUp: None
maxDn: None

Lines containing DDDD :

maxUp: None
maxDn: None