Python按順序讀取文件夾中文件


  參考資料:

  https://blog.csdn.net/qq_22227123/article/details/79903116

  https://blog.csdn.net/merdy_xi/article/details/78409632

  涉及到文件操作,我們有時候會讀取一個文件夾中的所有的文件。這些文件可能是文件名完全混亂的,也可能是完全格式化的(如1.png,2.png...)。下面介紹Python中的幾種按順序(假如有)讀取文件夾中文件的方法。

  首先不得不說的是python中的os.listdir()方法。 os.listdir() 方法用於返回指定的文件夾包含的文件或文件夾的名字的列表。功能是不是一目了然?

  但是,os.listdir()返回的文件名不一定是順序的,這就要求我們對返回的文件名列表進行排序:

  假設我們有一個這樣的文件夾:

   我們利用os.listdir()方法寫出如下代碼:

import os

path = '/Users/apple/Desktop/OCR'
path_list = os.listdir(path)
path_list.remove('.DS_Store')    # macos中的文件管理文件,默認隱藏,這里可以忽略
print(path_list)

  輸出結果如下:

  可見返回的文件名列表是一個奇怪的順序。

  OK,既然os.listdir(path)返回的是文件名列表,那么列表不是可以排序嗎,我只要用sort()方法,給列表中的文件名排個序不就好了?看看效果:

path = '/Users/apple/Desktop/OCR'
path_list = os.listdir(path)
path_list.remove('.DS_Store')    # 同上
path_list.sort()
print(path_list)

  輸出結果如下:  

  可見,大致的順序有了。但是糟糕的是10,11,12排到了2前面,這顯然是因為sort()采取了按字符鍵值排序的手段。

  那么怎樣解決這個問題呢?我們對代碼稍作改變:

path = '/Users/apple/Desktop/OCR'
path_list = os.listdir(path)
path_list.remove('.DS_Store')
path_list.sort(key=lambda x:int(x[:-4]))
print(path_list)

  新加入的一行做的事情是--對每個文件名將句號前的字符串轉化為數字,然后以數字為key來進行排序。這樣便能夠按照我們的心意來排序了。動手試試看看~~

  使用的時候發現了新問題:這個手段要求文件名高度格式化,假如一堆圖片中夾雜了一張其他格式的呢?比如13.jpeg,這樣的話上面的代碼會讀到句號,轉化不成int而報錯。這時候不妨試試下面的方法。

path = '/Users/apple/Desktop/OCR'
path_list = os.listdir(path)
path_list.remove('.DS_Store')
path_list.sort(key=lambda x:int(x.split('.')[0]))
print(path_list)

  這樣寫的話就只需考慮句號前面的數字順序了,更有普適性。

  水到渠成,讀取文件:

for filename in path_list:
    f = open(os.path.join(path,filename),'rb')

  總結一下:想要按順序讀取文件夾中的文件,方法不是固定的,對於不同的文件名見招拆招才是上策。實在不行咱們還可以動用我們的大殺器:正則表達式,只需要我們有一個善於發現文件名特征的眼睛就難不倒我們啦。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM