Python 3.x 如何将文件中的键、值对存储在字典中?
我有一个input.txt文件,格式如下Python 3.x 如何将文件中的键、值对存储在字典中?,python-3.x,dictionary,text-files,Python 3.x,Dictionary,Text Files,我有一个input.txt文件,格式如下 A=Xyz B 数值:274:53:3 C=1190 E wqqw 价值:554 A=UrR B 数值:113:00:1 C=34 E wqqw 价值:982 我想将与a、B和E相关的数据存储在字典中,以便获得: d={ 'A':['Xyz','UrR'], “B”:['274:53:3','113:00:1'], "E:[554,"982",, } 我像下面这样做,不仅仅是存储与A相关的键、值对,因为A的值在同一行中 d={“A”:[],“B”:[
A=Xyz
B
数值:274:53:3
C=1190
E
wqqw
价值:554
A=UrR
B
数值:113:00:1
C=34
E
wqqw
价值:982
我想将与a、B和E相关的数据存储在字典中,以便获得:
d={
'A':['Xyz','UrR'],
“B”:['274:53:3','113:00:1'],
"E:[554,"982",,
}
我像下面这样做,不仅仅是存储与A
相关的键、值对,因为A
的值在同一行中
d={“A”:[],“B”:[],“E”:[]}
对于打开的行('input.txt'):
第一行=行。替换(“:”,“=”,1)。拆分(“=”)
如果第一行[0]中的(“A”或“B”或“E”):
k=lst_线[0]。条带()
v=lst_行[1]。替换(“\n”,”).strip()
d[k]。追加(v)
>>>d
{'A':['Xyz','UrR'],'B':[],'E':[]}
我一直在研究如何存储
B
的值,它在Value:
之后的下一行,以及E
的值,它在Value:
之后的下两行,每个键似乎都有一个非常特定的逻辑,可以划分为独立的if
条件。下面的代码根据上述条件读取相应密钥的值
d = {"A": [], "B": [], "E": []}
with open("input.txt") as file:
while True:
line = file.readline() # read next line
if not line:
break # break on end of file
lst_line = line.replace(":", "=", 1).split("=") # key from line
if "A" in lst_line[0]:
k = lst_line[0].strip()
v = lst_line[1].replace("\n", "").strip()
d[k].append(v)
if "B" in lst_line[0]:
k = lst_line[0].strip()
line = file.readline() # read next line for value i.e. if key is B value is on the next line (one line below)
lst_line = line.replace(":", "=", 1).split("=") # get value for B
v = lst_line[1].replace("\n", "").strip()
d[k].append(v)
if "E" in lst_line[0]:
k = lst_line[0].strip()
file.readline() # skip junk line
line = file.readline() # read next line for value i.e. for E value is two lines below.
lst_line = line.replace(":", "=", 1).split("=") # get value for E
v = lst_line[1].replace("\n", "").strip()
d[k].append(v)
print(d)
输出:
{'A': ['Xyz', 'UrR'], 'B': ['274:53:3', '113:00:1'], 'E': ['554', '982']}
以下是如何使用正则表达式:
import re
with open('file.txt', 'r') as r:
r = r.read()
dct = {'A': re.findall('(?<=A \= ).*?(?= \n)',r),
'B': re.findall('\d\d\d:\d\d:\d',r),
'E': re.findall('(?<=Value:)\d\d\d(?!:)',r)}
print(dct)
您还可以显示语句的输出
print(d)
sure,added output。
{'A': ['Xyz', 'UrR'],
'B': ['274:53:3', '113:00:1'],
'E': ['554', '982']}