在 Python 中的目录中查找文件

Finding files in directories in Python

我一直在编写一些脚本,我需要访问 os 以通过计算目录中的所有当前文件来命名图像(在单击时保存 Mandelbrot 集的每个后续缩放),然后在调用以下函数后使用 %s 在字符串中命名它们,然后添加一个选项以将它们全部删除

我意识到下面总是会获取文件的绝对路径,但假设我们总是在同一个目录中,是否没有简化版本来获取当前工作目录

def count_files(self):
     count = 0
     for files in os.listdir(os.path.abspath(__file__))):
         if files.endswith(someext):
             count += 1
     return count

def delete_files(self):
     for files in os.listdir(os.path.abspath(__file__))):
         if files.endswith(.someext):
             os.remove(files)

既然你在做 .endswith 的事情,我认为 glob 模块可能会有些兴趣。

以下打印当前工作目录中扩展名为.py 的所有文件。不仅如此,它 returns 只有文件名,而不是路径,如您所说:

import glob

for fn in glob.glob('*.py'): print(fn)

输出:

temp1.py
temp2.py
temp3.py
_clean.py

编辑:重新阅读您的问题,我不确定您真正问的是什么。如果你想要一种比

更简单的方法来获取当前工作目录
os.path.abspath(__file__) 

那么是的,os.getcwd()

但是如果您更改脚本中的工作目录(例如通过 os.chdir()os.getcwd() 将会更改,而您的方法不会。

您可以使用 os.path.dirname(path) 获取 path 指向的对象的父目录。

def count_files(self):
 count = 0
 for files in os.listdir(os.path.dirname(os.path.abspath(__file__)))):
     if files.endswith(someext):
         count += 1
 return count

使用 antipathy* 它变得更容易一些:

from antipathy import Path

def count_files(pattern):
    return len(Path(__file__).glob(pattern))

def deletet_files(pattern):
    Path(__file__).unlink(pattern)

*披露:我是反感的作者。