2017-07-27 40 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

相關問題