Я все еще относительно новичок в Python. Я должен написать сценарий Python, который распечатывает все файлы и каталоги при определенных условиях: объяснение упражнения вы можете найти ниже.
Решение упражнения моего курса Scripting-languages не соответствует Кажется, не печатаю фактические результаты, я искал и пробовал, но не вижу, что с этим не так. В конце концов, это должно быть решение.
Предполагаемое решение:
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. Когда я запускаю решение в Powershell в Python, командная строка сразу открывается и закрывается. Когда я запускаю его непосредственно в 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 .
`