我有工作代码,如下所示:
# Wow. Much nesting. So spacebar
if __name__ == '__main__:
for eachDir in list_of_unrelated_directories:
for eachFile in os.listdir(eachDir):
if eachFile.endswith('.json'):
# do stuff here
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种更优雅的方式.我想不要让我的代码嵌套三层这样深,如果我可以把它变成一个单行的像
for each file that ends with .json in all these directories:
# do stuff
Run Code Online (Sandbox Code Playgroud)
那将更加令人敬畏.我还编辑了这一点,指出目录不在同一个文件夹中.就像你可能在你的主文件夹和/ tmp文件夹中寻找.json文件一样.所以我不是试图通过单个文件夹递归移动.
最 Pythonic 的方法是(在我看来)编写一个函数来生成某种类型的文件并使用它。那么你的调用代码就非常清晰简洁了。 其他一些答案非常简洁,但令人难以置信;在您的实际代码中,您应该重视清晰性而不是简洁性(当然,当您可以同时获得两者时,这是首选)。
这是函数:
import os
def files_from_directories(directories, filetype):
"""Yield files of filetype from all directories given."""
for directory in directories:
for file in glob.glob(os.path.join(directory, '*' + filetype))
yield file
Run Code Online (Sandbox Code Playgroud)
现在你的调用代码实际上是一行代码:
# What a good one-liner!!!!
for json_file in files_from_directories(directories, '.json'):
# do stuff
Run Code Online (Sandbox Code Playgroud)
现在你有了一句台词,而且是一句非常清晰的台词。另外,如果您想处理任何其他类型的文件,您只需对不同的文件类型重用该函数即可。
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |