python - os.walk 如何与 break 语句一起工作?
问题描述
我有以下代码...
for i,v in df_activity.iterrows():
folder = v["HDFS Location"].split('/')[-1]
print(i)
rootdir = '/home/gpumodel/simulation_26_aug/' + folder
for subdir, dirs, files in os.walk(rootdir):
for file in files:
if file.endswith(".json"):
print(subdir)
......
......(some process)
if condition:
index_viz_from.append(minval)
index_viz_to.append(maxval)
break
break
我的文件夹路径看起来像这样
/home/gpumodel/simulation_26_aug/Khopoli_1/FibreShot/2019-08-28/1/10
文件夹内的文件是这样的
part-00000-d57261c3-e707-4a76-b84c-6576741ecaa2-c000.json part-00000-e65e0c7e-dfb1-4ca6-b622-17ef8622da04-c000.json part-00000-e68fa877-4bff-4bff-aecb-c9cc0847c7db-c000.json _SUCCESS
我想知道上面的代码是如何工作的。根据我的理解,代码递归地运行直到 json 文件存在,当它处理一个 json 文件时,它遇到第一个break
语句并从中退出for in files
,之后它是转到for subdir, dirs, files in os.walk(rootdir):
还是转到第二个break
语句?
从程序的工作方式到for subdir, dirs, files in os.walk(rootdir):
. 为什么它不去第二个break
陈述。是因为给定的缩进吗?如果break
之前给定的一个缩进,工作会有所不同吗?
我的代码输出如下:
/home/gpumodel/simulation_26_aug/Khopoli_46/FibreShot/2019-08-29/1/10
/home/gpumodel/simulation_26_aug/Khopoli_47/FibreShot/2019-08-29/1/11
/home/gpumodel/simulation_26_aug/Khopoli_47/FibreShot/2019-08-29/1/10
/home/gpumodel/simulation_26_aug/Khopoli_48/FibreShot/2019-08-29/1/11
解决方案
老实说,break
if 语句的内部是多余的。您不需要它,因为在 if 语句之后,无论如何您都会立即中断。break
如果删除if 语句内部,代码应该以完全相同的方式工作。
此外,break
仅影响循环,而不影响 if 语句。您不会“跳出 if 语句”。break
带您脱离当前循环。它过早地停止了当前的、最本地的循环,不管它发生了什么。
推荐阅读
- codenameone - 代号一 InputStream 和 OutputStream
- c++ - 在“for循环”中使用gotoxy定位
- mysql - 在 WITH RECURSIVE 查询 MySQL 中添加到变量
- css - 定位语义-ui 图标
- android - FFmpeg 合并的视频缺少持续时间元数据
- javascript - svelte 如何处理进口内部的反应性
- pandas - 如何在 Pandas 中为频率计数绘制条形图?
- c++ - 纠正 Xcode 中的工作流程以避免错误:Architecture x86_64 的重复符号
- python - 有选择地替换字符串中的特定嵌套分隔符(括号),同时尊重嵌套
- android - ExoPlayer 强制用户使用软件解码器进行视频和音频