【发布时间】:2020-06-19 11:03:12
【问题描述】:
我对 Python 还是比较陌生。 我应该编写一个 Python 脚本,在特定条件下打印出所有文件和目录: 你可以在下面找到练习的解释。
我的课程脚本语言练习的解决方案似乎没有打印实际结果,我已经搜索并尝试过,但我看不出它有什么问题。毕竟它应该是解决方案。
假设的解决方案:
from pathlib import Path
import argparse
from pathlib import Path
import os
import re
def minimum_size(size):
def check(filename):
return os.path.getsize(filename) >= size
parser = argparse.ArgumentParser(prog='find')
parser.add_argument('path', default='.')
parser.add_argument('--minimum-size', dest='minimum_size', default=0, type=int)
parser.add_argument('--maximum-size', dest='maximum_size', default=float('inf'), type=int)
parser.add_argument('--no-directories', dest='no_directories', default=False, action='store_true')
parser.add_argument('--no-files', dest='no_files', default=False, action='store_true')
parser.add_argument('--extension', dest='extension')
parser.add_argument('--contains', dest='contains')
args = parser.parse_args()
path = Path(args.path)
for entry in path.glob('**/*'):
if not os.path.getsize(entry) >= args.minimum_size:
continue
if not os.path.getsize(entry) <= args.maximum_size:
continue
if args.no_directories and os.path.isdir(entry):
continue
if args.no_files and os.path.isfile(entry):
continue
if args.extension and not entry.suffix == args.extension:
continue
if args.contains:
if not os.path.isfile(entry):
continue
with open(entry, 'r') as file:
contents = file.read()
if not re.search(args.contains, contents):
continue
print(entry)
解释:
我自己对此的看法:我认为这些示例在调用文件时应该包含扩展名,所以我在尝试执行代码时会这样做。 我什至包含了文件的整个路径,这样我就不会收到“ObjectNotFound”错误。 当我在 Python 中的 Powershell 中运行解决方案时,命令提示符会立即打开和关闭。 当我直接在 Powershell 中运行它时,命令提示符会打开,列出所有输出并在完成后立即关闭。如果您能给我一种方法来阻止命令提示符关闭,以便我可以看到结果。我已经很高兴了。
Write a script `find.py` that prints out all files and directories
that satisfy certain conditions.
The following functionality must be supported:
* One positional parameter that specifies the directory in which to start looking recursively.
* `--minimum-size=N`: only files whose size is at least `N` must be listed.
* `--maximum-size=N`: only files whose size is at most `N` must be listed.
* `--no-directories`: don't list directories.
* `--no-files`: don't list files.
* `--extension=EXT`: only list entries with extension `EXT`
* `--contains=REGEX`: only list files whose contents match `REGEX`.
To get a better feel for how your script should work, feel free
to experiment with the solution. For example, try
`bash
# List everything starting from two directories up
$ python find ../..
# List all python files in current directory
$ python find --extension=.py .
`
【问题讨论】:
-
这不是 Python 问题;无论您的终端模拟器是什么,它都配置为在该窗口中运行的程序完成后关闭一个窗口。
-
我应该在网站上问一个关于如何配置它的不同问题,还是有一个快速的答案?
-
如果您找到了自己问题的解决方案,请将其作为答案分享。不要在问题中包含答案。
-
@Paolo:这样可以吗?
标签: python powershell command-prompt argparse pathlib