簡體   English   中英

Python使用鍵從文本中提取值

[英]Python extract values from text using keys

我有一個以下Key Value格式的文本文件

--START--
FirstName Kitty
LastName McCat
Color Red
random_data
Meow Meow
--END--

我想將文本中的特定值提取到變量或字典中。 例如,如果我要提取LastNameColor的值,什么是最好的方法?

random_data可以在文件中的任何位置,並且跨多行。

我已經考慮過使用正則表達式,但是我擔心性能和可讀性,因為在真實代碼中,我需要提取許多不同的鍵。

我還可以遍歷每一行並檢查每個鍵,但是當有10個以上的鍵時,這很混亂。 例如:

if line.startswith("LastName"):
    #split line at space and handle
if line.startswith("Color"):
    #split line at space and handle

希望有一些清潔的東西

tokens = ['LastName', 'Color']  
dictResult = {} 
with open(fileName,'r') as fileHandle: 
   for line in fileHandle:
      lineParts = line.split(" ")
      if len(lineParts) == 2 and lineParts[0] in tokens:
           dictResult[lineParts[0]] = lineParts[1]

假設您的文件位於一個名為sampletxt.txt的文件中,那么它將起作用。 它從鍵->值列表創建字典映射。

import re  
with open('sampletxt.txt', 'r') as f:
    txt = f.read()
keys = ['FirstName', 'LastName', 'Color']
d = {}
for key in keys:
    d[key] = re.findall(key+r'\s(.*)\s*\n*', txt)

此版本允許您選擇指定令牌

import re
​
s = """--START--
FirstName Kitty
LastName McCat
Color Red
random_data
Meow Meow
--END--"""

tokens = ["LastName", "Color"]
if len(tokens) == 0:
    print(re.findall("({0}) ({0})".format("\w+"), s))
else:
    print( list((t, re.findall("{} (\w+)".format(t), s)[0]) for t in tokens))

產量

[('LastName', 'McCat'), ('Color', 'Red')]

在建立其他答案的基礎上,此函數將使用正則表達式獲取任何文本鍵並返回找到的值:

import re
file_name = 'test.txt'

def get_text_value(text_key, file_name):
    match_str = text_key + "\s(\w+)\n"

    with open(file_name, "r") as f:
        text_to_check = f.readlines()

    text_value = None
    for line in text_to_check:

        matched = re.match(match_str, line)
        if matched:
            text_value = matched.group(1)

    return text_value

if __name__ == "__main__":

    first_key = "FirstName"
    first_value = get_text_value(first_key, file_name)
    print('Check for first key "{}" and value "{}"'.format(first_key,
                                                           first_value))

    second_key = "Color"
    second_value = get_text_value(second_key, file_name)
    print('Check for first key "{}" and value "{}"'.format(second_key,
                                                           second_value))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM