python3 文件查找、读取

整理一下文件读取方法。

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']
[]
<generator object _iglob at 0x000000000BF786D0>
.\ReadFilename.py
.\test_tfrecord.py
.\write_tfrecord.py

参考资料

[1] https://blog.csdn.net/AManFromEarth/article/details/79125361

猜你喜欢

转载自blog.csdn.net/qq_27871973/article/details/82835324
今日推荐