Skip to main content
 首页 » 编程设计

python之制作一个文件搜索程序,它接受带有 sys.argv 的单个正则表达式。

2025年04月02日26EasonJim

我需要制作一个完全符合标题所述的程序。我需要我的程序搜索所有当前文件和所有子目录以查看是否有任何文件与模式匹配。如果有任何文件与该模式匹配,则该文件的完整路径名应打印在屏幕上。

我已经完成了其中的一些,但是有些部分可能没有意义,因为我从类里面给我的示例中复制并粘贴了一些部分:

#!/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 中运行该程序时,我需要键入程序的名称,然后紧接着输入一个参数。该参数是我要搜索的文件的名称。因此,如果我输入“./lab7.py .txt”,我应该期望程序返回任何 .txt 文件。我仍然是初学者,答案对你们中的一些人来说似乎很明显,但我似乎无法完成使该程序按应有的方式运行所需的最后一步。感谢您提供任何帮助,谢谢。

请您参考如下方法:

您的 .txt 参数不是是一个正则表达式,而是一个简单的扩展,因此您不需要正则表达式包。

这是我的版本。因为它可以是扩展名,也可以是文件名的一部分,所以只需使用 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)) 

如果扩展名匹配,则打印完整的文件路径。也适用于子目录。