2016-12-03 39 views
0

我有這個格式的字符串的文件:.B:13 &答:4 & I:1 &我:! & H:| - | & H:} {& B:3 & H:![ - ] & &創建給定字符串的字典中的文本文件

它從一個 「」以「&」結尾,分隔每個條目鍵值對與「&」,最後分離其相應的價值與每個鍵一「:」
這是我到目前爲止有:

//讀取該數據
filehndl = open("text.dat") filedata = filehndl.read() filehndl.close()

但我不知道如何去除和拆分數據創建字典。任何幫助,將不勝感激!

+3

從列表搜索'python split''python dict和搜索,有很多解決方案。 –

回答

1

可以剝去第一和最後一個字符用:

filedata = filedata[1:-1] 

然後與分裂:

entries = filedata.split('&') 

然後分裂條目並把它們放在一個字典:

out_dict = {} 
for entry in entries: 
    entry_array = entry.split(':') 
    out_dict[entry_array[0]] = entry_array[1] 

所以你一共有

filehndl = open("text.dat") 
filedata = filehndl.read() 
filedata = filedata[1:-1] 

entries = filedata.split('&') 

out_dict = {} 
for entry in entries: 
    entry_array = entry.split(':') 
    out_dict[entry_array[0]] = entry_array[1] 

# out_dict is what you now want to work with 

filehndl.close() 
+0

謝謝!再次提到問題,我在out_dict [entry_array [0]] = entry_array [1] – Sakizzle

+0

處得到索引超出範圍錯誤我假設你已經從其他響應中得出結論,但是對於其他響應:第二個到最後一個&符號也需要被剝離,所以第三行應該是'filedata = filedata [1:-1]' –

+0

我仍然有點困惑,爲什麼我得到最後一行的IndexError for循環 – Sakizzle

0

我會假設你的文件只有一個單一的線,你不處理引用,這樣,那麼你可以用一臺發電機理解做到這一點:

with open("yourfile.txt") as file: 
    data = file.read().strip() 
    if data.startswith(".") and data.endswith("&"): 
     clean = data.lstrip(".").rstrip("&") 
     print dict(item.split(":") for item in clean.split("&")) 

這裏最重要的行是:

dict(item.split(":") for item in clean.split("&")) 

這將會由&性格分裂的字符串,然後由:性格再次分裂,在字典中終於「轉換」列表中。

1

1襯墊版本假設你的FILEDATA將1個襯墊也

1日拆分字典項目由&剝去.&後,再由:

filedata = r'.B:13&A:4&I:1&I:!&H:|-|&H:}{&B:!3&H:[-]&&' 
d = dict(i.split(':') for i in filedata.strip('.&\r\n').split('&')) 
# {'A': '4', 'I': '!', 'B': '!3', 'H': '[-]'} 
內置的字典分裂鍵值對

但這並不關心重複的項目具有相同的密鑰,例如,您有重複的密鑰B,後面的B:!3將覆蓋以前的B:13