[英]accessing values incorrectly from list in python
我有兩個示例文件。
myheader.h
#define MACRO1 42
#define lang_init () c_init()
#define min(X, Y) ((X) < (Y) ? (X) : (Y))
和 pyparser.py
from pyparsing import *
# define the structure of a macro definition (the empty term is used
# to advance to the next non-whitespace character)
macroDef = "#define" + Word(alphas+"_",alphanums+"_").setResultsName("macro") + \
empty + restOfLine.setResultsName("value")
with open('myheader.h', 'r') as f:
res = macroDef.scanString(f.read())
res = list(res)
print(res[0])
print(res[1])
print(res[2])
output 是
((['#define', 'MACRO1', '42'], {'macro': ['MACRO1'], 'value': ['42']}), 0, 17) ((['#define', 'lang_init', '() c_init()'], {'macro': ['lang_init'], 'value': ['() c_init()']}), 18, 48) ((['#define', 'min', '(X, Y) ((X) < (Y)? (X): (Y))'], {'macro': ['min'], 'value': ['(X, Y) ((X) < (Y)? (X): (Y))']}), 49, 91)
我以為 print(res[0]) 會打印“#define”,print print(res[1]) 會打印“MACRO1”等等。 我不太熟悉 Python,但我假設 res 不是數組,對嗎? 在這種情況下索引如何工作? 謝謝
問題,len(res) 的值是多少。
在 python 中,當您在列表中有一個列表時,您可以使用第二個索引器來訪問其中的元素。 因此,例如,如果第一個元素 res[0] 是一個列表,您可以執行 res[0][0] 以獲得“#define”。
但是,您顯示的 output 的格式與典型的嵌套列表語法不同,因此執行 res[0][0] 可能不起作用(因為它可能不是正確的對象類型)。
嵌套列表應該是這樣的:[[0, 1], [1, 2, 100], [2, 3], [3, 4], [4, 5]]
你的 output 看起來像它的 json 格式,但不知道數據類型 object 我肯定不能確定。 如果它是 json,您可以執行 json.loads(res) 然后以這種方式解析它。 https://www.freecodecamp.org/news/python-json-how-to-convert-a-string-to-json/
您的部分困惑源於對從 scanString 返回的內容的誤解。 scanString(這是新方法 scan_string 的遺留兼容性名稱)實際上是一個生成器,它為每個找到的匹配項生成一個元組。 元組包含:
如果您不想要 position 值,請改用 search_string,它將只返回每個匹配項的 ParseResults 列表。
查看在線文檔,了解有關如何使用 scan_string、search_string、ParserElements 和 ParseResults 的更多詳細信息。 https://pyparsing-docs.readthedocs.io/en/latest/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.