整理一下文件读取方法。
1.文件夹读取的几种方法
1.1 os.listdir()
'''
方法一,使用os.listdir
'''
import os
for filename in os.listdir():
print(filename)
os.listdir():括号里是目录地址参数,没有输入参数表示当前目录
1.2 os.walk(path)
path是指想遍历文件夹的路径。
'''
方法二,使用os.walk
'''
import os
print(os.getcwd())
path = os.getcwd()
for i in os.walk(path):
print(i)
结果截图(一部分):
注意:os.walk(path)函数得到的结果是一个或多个tuple,个数取决于路径下是否有文件夹:如果没有文件夹的话,只有一个tuple,如果有的话,假如有N个,那么就会有N+1个tuple。
每个tuple中有三项内容:
1.当前文件夹的路径(str类型)
2.当前文件夹中的所有文件夹名称(list类型) ,要是当前文件夹中没有子文件夹了,就返回[ ]
3.当前文件夹中所有文件的名称
所以,当只需要遍历当前文件夹下的文件时,只需要取出tuple的第三项即可。 或者使用os.listdir(path)函数能得到文件夹下所有文件(包括文件夹)的名称,但是无法获取子文件夹的状态。
一个学习例子,使用os.listdir ()递归调用文件:
import os
def list_all_files(rootdir):
_files = []
list = os.listdir(rootdir) #列出文件夹下所有的目录与文件
for i in range(0,len(list)):
path = os.path.join(rootdir,list[i])#合并路径,将rootdir和list合并
if os.path.isdir(path):
_files.extend(list_all_files(path))#递归调用函数
if os.path.isfile(path):
_files.append(path)
return _files
rootdir = os.getcwd()
file = list_all_files(rootdir)
print(file)
使用了几个新函数:
1.os.path.join()路径合并函数,参考 Python中 os.path.join()与join()对比join()函数
2.append和extend区别:https://blog.csdn.net/qq_27871973/article/details/82796992
2、Python中glob模块查找文件路径
1.glob.glob(pathname), 返回所有匹配的文件路径列表。它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。
2.glob.iglob(pathname), 获取一个可编历对象,使用它可以逐个获取匹配的文件路径名。与glob.glob()的区别是:glob.glob同时获取所有的匹配路径,而glob.iglob一次只获取一个匹配路径。
import glob
print(glob.glob(r'*.py'))
print(glob.glob(r'.\*.py'))
print(glob.glob(r'*.doc'))#查抄doc文件
print(glob.iglob(r'*.py'))#获取一个可以遍历的对象。
name = glob.iglob(r'.\*.py')
for file in name:
print(file)
结果如下:
['ReadFilename.py', 'test_tfrecord.py', 'write_tfrecord.py']
['.\\ReadFilename.py', '.\\test_tfrecord.py', '.\\write_tfrecord.py']
[]
.\ReadFilename.py
.\test_tfrecord.py
.\write_tfrecord.py
参考资料
[1] https://blog.csdn.net/AManFromEarth/article/details/79125361