1. 程式人生 > >python3 檔案查詢、讀取

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