最近用Python读取文件夹下所有图片文件时,遇到一点点麻烦:该文件夹包含多级子文件夹。虽然不是什么困难事情,但对新手来说可能是一件抓头的事情。
如图:读取图片及子目录下的图片
废话不多说,直接列出两种方法
递归方法:
def recurrence(path,file_list):
for file in os.listdir(path):
fs = os.path.join(path, file)
if os.path.isfile(fs):
file_list.append(fs)
elif os.path.isdir(fs):
recurrence(fs, file_list)
if __name__=="__main__":
path = 'C:\\Users\\Desktop\\captchaRec\\验证码图片1020'
filenames = [] # 带路径的文件名存入列表
recurrence(path, filenames)
print(len(filenames))
walk方法:
os自带的遍历函数
def walk(path, file_list):
ff = os.walk(path)
for root, dirs, files in ff:
for file in files:
file_list.append(os.path.join(root, file))
scandir方法:
os.scandir方法是一种比较快速的方法,但仍然需要递归来实现
def scandir(path,file_list):
for item in os.scandir(path):
if item.is_dir():
scandir(item.path,file_list)
elif item.is_file():
file_list.append(item.path)
不读取隐藏文件:
考虑到以上方法都会读取到隐藏文件,所以想不读取隐藏文件,需要增加一个文件属性判断即可。
linux 下隐藏文件是以句号 “.” 开头的文件,根据文件名即可判断是否为隐藏文件。
win 下是以文件隐藏属性确定的,所以,只能通过微软的 API 获取隐藏属性来判断是否为隐藏文件。
import win32api
attr= win32api.GetFileAttributes('dfile.txt')
print(attr) # 128表示正常
attr值对应的属性如下所示:
FILE_ATTRIBUTE_READONLY = 1 (0x1) # 属性-隐藏
FILE_ATTRIBUTE_HIDDEN = 2 (0x2) # 属性-隐藏
FILE_ATTRIBUTE_SYSTEM = 4 (0x4) # 属性-系统文件
FILE_ATTRIBUTE_DIRECTORY = 16 (0x10)
FILE_ATTRIBUTE_ARCHIVE = 32 (0x20)
FILE_ATTRIBUTE_NORMAL = 128 (0x80) # 属性-正常
FILE_ATTRIBUTE_TEMPORARY = 256 (0x100)
FILE_ATTRIBUTE_SPARSE_FILE = 512 (0x200)
FILE_ATTRIBUTE_REPARSE_POINT = 1024 (0x400)
FILE_ATTRIBUTE_COMPRESSED = 2048 (0x800)
FILE_ATTRIBUTE_OFFLINE = 4096 (0x1000)
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 8192 (0x2000)
FILE_ATTRIBUTE_ENCRYPTED = 16384 (0x4000)
来源:oschina
链接:https://my.oschina.net/u/3851199/blog/3017747