您的代码有以下问题:
for line in contents:
if 'module' in line:
在这里,
contents
是包含文件全部内容的单个字符串,而不是可以逐行循环的字符串(行)列表或文件句柄。因此,你的
line
实际上不是一行,而是字符串中的一个字符,显然可以
从未
包含子字符串
"module"
.
因为你从来没有
使用
这个
线
在循环中,您只需删除循环和条件,代码就可以正常工作。(如果您将代码更改为实际循环行,并且
find
在这些行中,它不会工作,因为
(
和
)
不在同一行。)
或者,可以使用正则表达式:
>>> content = """module traffic(green_main, yellow_main, red_main, green_first, yellow_first,
... red_first, clk, rst, waiting_main, waiting_first);"""
...
>>> re.search("module \w+\((.*?)\);", content, re.DOTALL).group(1)
'green_main, yellow_main, red_main, green_first, yellow_first, \n red_first, clk, rst, waiting_main, waiting_first'
在这里,
module \w+\((.*?)\);
方法
-
单词
module
后面是空格和一些单词类型
\w
文字
-
字面上的开头
(
-
抓捕组
(...)
带着任何东西
.
,包括换行符(
re.DOTALL
),非贪婪
*?
-
字面上的结束语
)
和
;
和
group(1)
在(非逃逸的)对
(…)
如果你想把这些列在清单上:
>>> list(map(str.strip, _.split(",")))
['green_main', 'yellow_main', 'red_main', 'green_first', 'yellow_first', 'red_first', 'clk', 'rst', 'waiting_main', 'waiting_first']