[英]Python Read Formatted String
我有一個文件,其中包含許多使用以下語法格式化的行:
FIELD POSITION DATA TYPE
------------------------------
COOP ID 1-6 Character
LATITUDE 8-15 Real
LONGITUDE 17-25 Real
ELEVATION 27-32 Real
STATE 34-35 Character
NAME 37-66 Character
COMPONENT1 68-73 Character
COMPONENT2 75-80 Character
COMPONENT3 82-87 Character
UTC OFFSET 89-90 Integer
數據全部是ASCII格式的。
一行的例子是:
011084 31.0581 -87.0547 26.0 AL BREWTON 3 SSE ------ ------ ------ +6
我目前的想法是,我想一次讀取一行中的文件,並以某種方式將每行分解為字典,以便我可以參考組件。 是否有一些模塊在Python中執行此操作,或其他一些干凈的方式?
謝謝!
編輯 :您仍然可以使用struct模塊:
請參閱struct module文檔。 在我看來你想要使用struct.unpack()
你想要的可能是這樣的:
import struct
with open("filename.txt", "r") as f:
for line in f:
(coop_id, lat, lon, elev, state, name, c1, c2, c3, utc_offset
) = struct.unpack("6sx8sx9sx6sx2sx30sx6sx6sx6sx2s", line.strip())
(lat, lon, elev) = map(float, (lat, lon, elev))
utc_offset = int(utc_offset)
我想我從你的問題/評論中理解你在尋找什么。 如果我們假設Real,Character和Integer是唯一的數據類型,那么以下代碼應該可以工作。 (我還假設您顯示的格式文件是制表符分隔的):
format = {}
types = {"Real":float, "Character":str, "Integer":int}
for line in open("format.txt", "r"):
values = line.split("\t")
range = values[1].split("-")
format[values[0]]={"start":int(range[0])-1, "end":int(range[1])-1, "type":types[values[2]]}
results=[]
for line in open("filename.txt"):
result={}
for key in format:
result[key]=format["type"](line[format["start"]:format["end"]])
results.append(result)
您應該得到包含字典列表的結果,其中每個字典都是從格式文件中的鍵名到正確數據類型的數據值的映射。
看起來你可以相當簡單地使用字符串和切片編寫一個函數。 string [0:5]將是第一個元素。 它是否需要是可擴展的,還是可能是一次性的?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.