[英]Python extract values from text using keys
我有一個以下Key Value
格式的文本文件
--START--
FirstName Kitty
LastName McCat
Color Red
random_data
Meow Meow
--END--
我想將文本中的特定值提取到變量或字典中。 例如,如果我要提取LastName
和Color
的值,什么是最好的方法?
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.