2017-07-27 48 views
1

好的,所以我找不到合适的标题,所以我会尽我所能解释。找到文件中的所有特定字符串,并获得最高值

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

+0

是,打开和读取相同文件'N'次发送错误。交换循环,以便为每一行检查目标字符串的列表。 – Fhaab

+0

你只关心它出现在PIN码中吗?或整条线? – mattjegan

回答

0

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

因此,我们通过循环搜索条件列表中的每个字符串开始搜索行,然后检查每行数据,我们检查字符串是否在行中,如果是,我们检查看看它是否打破了任何记录,然后我们记录它。 注:我已经改变了名单,因为名单里的名字是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 
+0

我试过了,出于某种原因,它只会查找列表中的第一个字符串。其他人没有写入我的输出文件。另外我怎么会继续使用Maxup和MaxDn? –

+0

编辑完成后的情况如何 – mattjegan

相关问题