2017-06-13 50 views
-2

我有一個包含這些線路例如如何檢查列表中的項目是否存在於使用python的其他列表中?

[:];@;;]wqwww actualnumber 1234 ;;:@## 
aaaa ''3# allnumber 9876 
///qqq |||))) 
]][]: best 56 

我想要得到的價值1234987656一個文本文件。像這樣(期望輸出)

1234 
9876 
56 

我試着用下面的腳本,但它並沒有打印出任何東西

with open("test.txt", "r") as f: 
    lines = f.readlines() 
    stripped_lines = [line.strip() for line in lines] 

    word = ["actual number", "potential", "time"] 
    if any(item in stripped_lines for item in word): 
     aa = stripped_lines.split("actualnumber ")[1].split(" ")[0] 
     bb = stripped_lines.split("allnumber ")[1].split(" ")[1] 
     cc = stripped_lines.split("best ")[1] 

     print aa 
     print bb 
     print cc 

我錯過了什麼?

+0

你真的想通過關鍵字在字符串中搜索數字,或者你只是想抓住一個字符串中的任何數字? – Liliane

+0

我其實想抓住特定位置的號碼。所以我爲什麼要'9876'而不是'3'。如果你可以在文本文件中看到,基本上我想要得到一個關鍵字後的數字 – Ling

+0

Hi @Ling可能會幫助找到相同的值, match_values = [我在stripped_lines中的item for i in word if item在我] 爲match_values值: \t打印(價值) – Anup

回答

1

你可以用re模塊

import re 
with open('f.txt') as f: 
    data = f.read() 
    act = re.findall(r'actualnumber\s+(\d+)',data) 
    best = re.findall(r'best\s(\d+)',data) 
    allnumber = re.findall(r'allnumber\s(\d+)',data) 
    print "actualnumber : ", act[0] if act else None 
    print "allnumber : ", allnumber[0] if allnumber else None 
    print "best : ", best[0] if best else None 

輸出

actualnumber : 1234 
allnumber : 9876 
best : 56 
+0

這是偉大的,但我想得到的每個值不是列表。我的意思是,例如'aa'將打印'1234','bb'將打印'9876','cc'將打印'56'。這樣我就可以在其他操作中使用'1234'的'aa'的值 – Ling

+0

我更新了我的答案和你的要求。 @Ling – Arun

+0

@Ling你是否需要將它們存儲在變量aa,bb,cc中?或者一本字典是否合適?例如''{'allnumber':9876}''。 – Liliane

0

做到這一點你可以這樣提取號碼:

k = '[:];@;;]wqwww actualnumber 1234 ;;:@##' 
for item in k.split(): 
    if item.isnumeric(): 
     print(item) 

你會用你的條紋線代替。對於條線中的每一行,分割它,並檢查分割線中的任何項目是否爲數字。 isnumeric()只適用於unicode對象。

with open("test.txt", "r") as f: 
    lines = f.readlines() 
    stripped_lines = [line.strip() for line in lines] 

words = ['actualnumber', 'allnumber', 'best'] 
found = {} 
for line in stripped_lines: 
    current_line = line.split() 
    for position, item in enumerate(current_line): 
     if item in words: 
      found[item] = current_line[position + 1] 

現在,你有他們在字典中,您可以訪問它們爲:found['actualnumber']。並進行進一步的處理,例如將它們存儲在數據庫中。

0

最簡單的方法是使用isdigit()

f = open('test.txt') 
data = f.read() 
[int(s) for s in data.split() if s.lstrip("-").isdigit()] 

輸出:

[1234, 9876, 56] 
+0

如果數字是負數,該怎麼辦? ''「-1」.isdigit()''返回''False''。 – Liliane

+0

@Liliane在這種情況下,您可以使用lsstrip(「 - 」) –

0
word = ["actualnumber", "potential", "time"] 
    with open("./abx.txt") as file: 
     temp_list = [line.strip() for line in file.readlines()] 
     list_val = [item for item in temp_list if any(x in item for x in word)] 
     final_list = [] 
     match_value = ["actualnumber", "allnumber", "best"] 
     if list_val: 
      for val in temp_list: 
      val_list = val.split(" ") 
      for key, value in enumerate(val_list): 
       if value in match_value: 
        final_list.append(val_list[key+1]) 

     print(final_list): 

,並在結束時,你可以遍歷列表,並找出你的預期值。

相關問題