我剛剛開始我的編碼冒險。我的問題是我有一個結構檔案:
% program : RTKPOST
% pos mode : ppp-static
% solution : forward
% elev mask : 10.0 deg
% dynamics : off
% tidecorr : off
% tropo opt : saastamoinen
% ephemeris : broadcast
% ==================================== END OF HEADER
我希望代碼回傳字典 {program: "RTKPOST", pos_mode : "ppp-static"}
我在嘗試:
data = []
header = {}
with open("file.txt") as file:
for line in file:
if line.startswith("%"):
key, val = line.split()
header[key] = val
else:
data.append(line.split())
并得到:
ValueError: too many values to unpack (expected 2)
uj5u.com熱心網友回復:
該語法x, y = z可用于分配給x和y中的值z,但它期望z具有正確數量的可用值(在本例中為 2)。這有效,例如
>>> x, y = [1, 2]
>>> x
1
>>> y
2
但這不會:
>>> x, y = [1, 2, 3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
由于您line.split()的每個s 都有超過 2 個值,因此key, val = line.split()將始終產生此錯誤。問題是,例如檔案的最后一行不遵循與第一行相同的規則。一般來說,這種方法不會很穩健。
我建議改為使用正則運算式來挑選您想要的鍵值對。這樣你就可以很方便的指定key-value對在檔案中的格式,并且很方便的從整個檔案中提取出來,如果以后格式有變化,只需要修改正則運算式即可。
我建議使用正則運算式:
header_property = r'^% (. ):(. )$'
要解釋這個正則運算式,請查看re docs。簡而言之,這將匹配以 開頭的行% ,后跟一個或多個:中間帶有 a 的字符的字串。
使用它的完整示例如下:
import re
header_property = r'^% (. ):(. )$'
header = {}
with open("file.txt") as file:
for line in file:
match = re.search(header_property, line)
if match is not None:
key = match.group(1).strip()
value = match.group(2).strip()
header[key] = value
之后header將是
>>> header
{'program': 'RTKPOST', 'pos mode': 'ppp-static', ..., 'ephemeris': broadcast'}
幾乎可以使用正則運算式從文本檔案中提取任何內容。值得學習一下如何使用它們。
uj5u.com熱心網友回復:
- 拆分,
':'因為這是將您的鍵與您的值分開的原因。 - 確保不要嘗試拆分/決議該
END OF HEADER行。
data = []
header = {}
with open("file.txt") as file:
for line in file:
if line.startswith("% =="):
break
if not line.startswith("%"):
data.append(line.split())
continue
key, val = map(str.strip, line[1:].split(':'))
header[key] = val
print(header)
印刷:
{'program': 'RTKPOST', 'pos mode': 'ppp-static', 'solution': 'forward', 'elev mask': '10.0 deg', 'dynamics': 'off', 'tidecorr': 'off', 'tropo opt': 'saastamoinen', 'ephemeris': 'broadcast'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/400147.html
上一篇:獲取值/字典Python
