我需要制作一个完全符合标题的程序。我需要我的程序搜索所有当前文件和所有子目录,以查看是否有任何文件与模式匹配。如果任何文件与模式匹配,则应在屏幕上打印文件的整个路径名。
我已经完成了一些,但是有些部分可能没有意义,因为我复制并粘贴了在课堂上给我的例子中的一些部分:
#!/usr/bin/env python
import re, glob, sys, os
if (len(sys.argv) < 2):
print("You need an argument.")
sys.exit(0)
var = sys.argv(1)
#re.search(var,
data = os.walk(".")
for tup in data:
dirname = tup[0]
dirlist = tup[1]
dirlist = tup[2]
for file in filelist:
fullname = os.path.join(dirname, file)
username = owner(fullname)
if re.data:
print(os.path.abspath(os.path.join(username, fullname)))
基本上,当我在Linux中运行程序时,我需要输入程序的名称,然后输入一个参数。该参数是我要搜索的文件的名称。所以,如果我输入&#34; ./ lab7.py .txt&#34;我应该期望程序返回任何.txt文件。我仍然是一个初学者,对你们中的一些人来说,答案似乎很明显,但我似乎无法做出最后一步,让这个程序以它应该的方式运行。感谢任何帮助,谢谢。
答案 0 :(得分:1)
你的.txt
参数不是意味着是一个正则表达式而是一个简单的扩展名,因此你不需要使用regulax表达式包。
这是我的版本。由于它可以是扩展名,也可以是文件名的一部分,因此只需使用in
即可。我还简化了owner()
部分没有任何意义(除了你的代码很接近)
import os,sys
if (len(sys.argv) < 2):
print("You need an argument.")
sys.exit(0)
var = sys.argv[1]
for root,dirs,files in os.walk("."):
for f in files:
if var in f:
fullname = os.path.join(root, f)
print(os.path.abspath(fullname))
如果扩展名匹配,则打印完整的文件路径。也适用于子目录。
答案 1 :(得分:0)
这个答案显示了基于模块cli的方法的高级草图,用于创建可重用的实用程序。
例如my_find . | my_grep 'txt'
。
Python setup.py develop vs install
mkdir -p Homework/my_homework
touch Homework/setup.py
touch Homework/my_homework/assignment1.py
virtualenv venv_homework
source venv_homework/bin/activate
python setup.py develop
my_find . | my_grep 'txt'
setup.py:
from setuptools import setup, find_packages
setup(name='my_homework',
install_requires=[
# e.g. 'gevent>=0.0.0',
],
entry_points={
"console_scripts": [
"my_find=my_homework.assignment1:list_directories",
"my_grep=my_homework.assignment1:search_a_string",
]
},
include_package_data=True,
packages=find_packages(),
package_data={
# config files
},
zip_safe=False)
作业/ my_homework / assignment1.py:
import fileinput
import argparse
import os, sys
def list_directories():
# https://stackoverflow.com/questions/2212643/python-recursive-folder-read
sys.stdout.write('/some/directory/with/a/file.txt\n')
sys.stdout.write('/some/directory/without/a/file\n')
def search_a_string():
'''
reads from stdout and gets a regex from from sys.argv via argparse
returns any found regexes back to stdout
'''
# extra credit rewrite ArgumentParser using sys.argv
argparser = argparse.ArgumentParser()
argparser.add_argument('my_grep_args', metavar='MY_GREP_ARGS', nargs='*')
print(my_grep_args)
for line in fileinput.input():
# https://stackoverflow.com/questions/19300020/python-match-a-string-with-regex
sys.stdout.write('regex found {}\n'.format(line))
有一些魔力但是,基本上通过setuptools
或python setup.py develop
的setup.py会将函数my_find
和my_grep
放入$PATH
,类似于调用像python -m 'my_homework.assignment1.list_directories' . | python -m 'my_homework.assignment1.search_a_string' 'txt'
相关:强>