- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我定义了一个 for 循环,如下所示,它扫描由两列组成的文件,当它找到关键字 DEFINE_MENU
时,该行的第二列引用屏幕的标题。关键字的下一个实例将为单独的屏幕定义标题,依此类推到第 n 个屏幕。目前,代码能够定义第一个菜单标题。
是否有可能,当我到达关键字 DEFINE_MENU
的第二个实例时,对同一行重复循环,设置 title_flag = 0
从而重复自身,捕获第二个菜单标题?
def getInfo():
title_flag = 0
number = 1
menus = {}
items = {}
title = None
file = open('some_file', 'r')
for line in file:
# Test for comments, if they exist pass and move on
if line[0] == '#':
continue
# Hop over blank lines
if re.search(r'^\s+$', line):
continue
# Find the line where the title is defined
if re.search('DEFINE_MENU', line) and title_flag == 0:
type, name = line.split()
title = name
title_flag = 1
continue
# If DEFINE_MENU is found and flag has been raised, this
# signifies a new menu definition so break.
if re.search('DEFINE_MENU', line) and title_flag == 1:
break
if re.search('PRIV', line):
(type, name, priv_holder, *description) = line.split()
else:
(type, name, *description) = line.split()
# If flag has been raised, the line must follow the definition
# of the menu, it must contains info regarding a menu item.
if title_flag == 1:
description = ' '.join(description)
items[str(number)] = name
number += 1
file.close()
menus[title] = items
return menus
感谢您的投入!
汤姆
编辑:首先,对造成的困惑表示歉意。也许我认为这个问题比我想象的要简单,并且提供的信息少于所需的信息。我将深入研究,我使用的输入文件的形式为:
# MENU TYPE NAME PRIV? DESCRIPTION
DEFINE_MENU CRAGINS
MENU menu_name1 This takes you to menu 1
MENU menu_name2 This takes you to menu 2
VARIABLE var_name1 Alter variable1
VARIABLE var_name2 PRIV Alter variable1
COMMAND command1 Perform command1
DEFINE_MENU MENU2
MENU menu_name3 This takes you to menu 3
MENU menu_name4 This takes you to menu 4
VARIABLE var_name3 Alter variable3
VARIABLE var_name4 PRIV Alter variable4
COMMAND command3 Perform command3
当我进一步操作 DEFINE_MENU
调用之间的数据时,我提出了该标志。我已经编辑了代码以包含我编写的完整方法。
结果当前是一个字典,其中键是菜单标题,值是包含菜单项(标题后面的值)的另一个字典,如下所示:
{'title1': {'1': 'menu_name1', '3': 'var_name1', '2': 'menu_name2', '5': 'command1', '4': 'var_name2'}}
我想要的是一个更大的字典,其中包含菜单标题作为键,以最低级别的字典作为值。我知道这很复杂,所以如果不清楚,请告诉我是否需要更多信息。
再次感谢
汤姆
最佳答案
如果我正确理解你的问题描述,你想重复循环主体(在某些情况下)而不是“迭代”。如果是这种情况,一种可行的方法是将循环体变成一个可能递归的函数,如果循环要中断,则返回 True
;如果要继续,则返回 False
,以及可能的标题。例如,一个最直接(尽管可能不是最优雅)的函数:
def body(line):
global title_flag
# skip over comments
if line[0] == '#':
return None, False
# skip over blank lines
if re.search(r'^\s+$', line):
return None, False
# Find the line where the title is defined
if 'DEFINE_MENU' in line and title_flag == 0:
type, name = line.split()
title = name
title_flag = 1
return title, body(line)
# If DEFINE_MENU is found and flag has been raised, this
# signifies a new menu definition.
if 'DEFINE_MENU' in line and title_flag == 1:
return None, True
主线代码变为:
title_flag = 0
with open('some_file', 'r') as afile:
for line in afile:
thetitle, mustbreak = body(line)
if thetitle is not Note: title = thetitle
if mustbreak: break
顺便说一句:不要通过篡改内置名称(如 file
)来命名您自己的变量 - 这是一个单独的主题;-)。 BTW2:我使用 with
(假设 Python 2.6 或更好,或者 2.5 带有“从 future 导入”)只是因为它是打开和关闭的正确方法。文件;-)。 BTW3:我删除了 re.search
,因为当一个简单的 in
运算符明显执行相同的工作时,它是肆意的、莫名其妙的过度杀戮。
我发布这段代码主要是为了具体检查我是否理解你的规范,因为从行为角度来看,这绝对是矫枉过正——没有必要(从你发布的代码来看)重复检查注释和空行,也不是搜索 'DEFINE_MENU"
等...您可以在设置标题后立即退出(并且 body
然后可以变为内联再次编码)。
但是,我想您发布问题是有原因的,即,这种简单的行为(并且可以更简单地实现)对您来说并不是最佳的 - 也许通过查看您的文字的解决方案您可以指出您想要的与此不同的问题,然后我们实际上可以帮助您;-)。
关于python - 是否可以重复循环的迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3238080/
我正在处理一组标记为 160 个组的 173k 点。我想通过合并最接近的(到 9 或 10 个组)来减少组/集群的数量。我搜索过 sklearn 或类似的库,但没有成功。 我猜它只是通过 knn 聚类
我有一个扁平数字列表,这些数字逻辑上以 3 为一组,其中每个三元组是 (number, __ignored, flag[0 or 1]),例如: [7,56,1, 8,0,0, 2,0,0, 6,1,
我正在使用 pipenv 来管理我的包。我想编写一个 python 脚本来调用另一个使用不同虚拟环境(VE)的 python 脚本。 如何运行使用 VE1 的 python 脚本 1 并调用另一个 p
假设我有一个文件 script.py 位于 path = "foo/bar/script.py"。我正在寻找一种在 Python 中通过函数 execute_script() 从我的主要 Python
这听起来像是谜语或笑话,但实际上我还没有找到这个问题的答案。 问题到底是什么? 我想运行 2 个脚本。在第一个脚本中,我调用另一个脚本,但我希望它们继续并行,而不是在两个单独的线程中。主要是我不希望第
我有一个带有 python 2.5.5 的软件。我想发送一个命令,该命令将在 python 2.7.5 中启动一个脚本,然后继续执行该脚本。 我试过用 #!python2.7.5 和http://re
我在 python 命令行(使用 python 2.7)中,并尝试运行 Python 脚本。我的操作系统是 Windows 7。我已将我的目录设置为包含我所有脚本的文件夹,使用: os.chdir("
剧透:部分解决(见最后)。 以下是使用 Python 嵌入的代码示例: #include int main(int argc, char** argv) { Py_SetPythonHome
假设我有以下列表,对应于及时的股票价格: prices = [1, 3, 7, 10, 9, 8, 5, 3, 6, 8, 12, 9, 6, 10, 13, 8, 4, 11] 我想确定以下总体上最
所以我试图在选择某个单选按钮时更改此框架的背景。 我的框架位于一个类中,并且单选按钮的功能位于该类之外。 (这样我就可以在所有其他框架上调用它们。) 问题是每当我选择单选按钮时都会出现以下错误: co
我正在尝试将字符串与 python 中的正则表达式进行比较,如下所示, #!/usr/bin/env python3 import re str1 = "Expecting property name
考虑以下原型(prototype) Boost.Python 模块,该模块从单独的 C++ 头文件中引入类“D”。 /* file: a/b.cpp */ BOOST_PYTHON_MODULE(c)
如何编写一个程序来“识别函数调用的行号?” python 检查模块提供了定位行号的选项,但是, def di(): return inspect.currentframe().f_back.f_l
我已经使用 macports 安装了 Python 2.7,并且由于我的 $PATH 变量,这就是我输入 $ python 时得到的变量。然而,virtualenv 默认使用 Python 2.6,除
我只想问如何加快 python 上的 re.search 速度。 我有一个很长的字符串行,长度为 176861(即带有一些符号的字母数字字符),我使用此函数测试了该行以进行研究: def getExe
list1= [u'%app%%General%%Council%', u'%people%', u'%people%%Regional%%Council%%Mandate%', u'%ppp%%Ge
这个问题在这里已经有了答案: Is it Pythonic to use list comprehensions for just side effects? (7 个答案) 关闭 4 个月前。 告
我想用 Python 将两个列表组合成一个列表,方法如下: a = [1,1,1,2,2,2,3,3,3,3] b= ["Sun", "is", "bright", "June","and" ,"Ju
我正在运行带有最新 Boost 发行版 (1.55.0) 的 Mac OS X 10.8.4 (Darwin 12.4.0)。我正在按照说明 here构建包含在我的发行版中的教程 Boost-Pyth
学习 Python,我正在尝试制作一个没有任何第 3 方库的网络抓取工具,这样过程对我来说并没有简化,而且我知道我在做什么。我浏览了一些在线资源,但所有这些都让我对某些事情感到困惑。 html 看起来
我是一名优秀的程序员,十分优秀!