在深度學習中
我們首先要准備數據集,尤其時用pytorch進行模型搭建訓練時,需要首先構建dataset,然后封裝為dataloder。
在生成dataset時,我們通過圖片路徑讀取圖片,然后進行一系列圖片變換,生成可用於訓練的dataset,我們需要把圖片路徑保存在一個.txt文件中,
通過讀取.txt文件,將所有圖片路徑保存在一個list 里面,后面再用__getitem__(self, index)方法讀取圖片。
self.files = [line.rstrip() for line in tuple(open(file_list, "r"))]
下面總結一下生成.txt 函數常用的幾個API
因為圖片都存放在文件夾下,所以最常用的就是 os 模塊
1. os.listdir
通過listdir 可以將文件夾下的所有文件名稱放到一個列表里,只要我們遍歷這個列表,並把列表里的元素寫入到txt文件中即可
2. endswith(".jpg")
通過endswith(" ") 可以篩選符合要求的文件,通常我們的圖片文件都是以文件格式結尾的,如.jpg, .jpeg。。。
3. open(filename, ‘w') as f
通過open(filename, ‘w') as f 可以打開.txt 文件,如果此文件不存在可以創建該文件,后面通過f.write(file_path) 方法將路徑寫入.txt文件中
4. os.path.join()
通過os.path.join() 可以生成相對路徑,
5. os.path.exists() , os.makedirs()
上面的兩個方法較常用,用於判斷是否存在該路徑,如果不存在,則新建該路徑, 存放文件
在 os模塊中還有一個采用遞歸的方式 遍歷文件下下所有文件和目錄的方法(os.walk(rootdir))
函數返回一個可用for 循環遍歷的三元素元組
如下所示文件結構:
采用os.walk()方法遍歷:獲得所以根目錄下的所有文件
同理可以獲得根目錄下的所有子目錄
for root, dirs, files in os.walk("google_tensorflow"): for dir in dirs: print(root) print(os.path.join(root, dir))
如果我們想看一下某目錄下總共有多少張圖片,可以采用glob模塊下的glob方法
file_num = glob.glob(pathname=os.path.join(filepath, dirs, "*.jpg")) print(len(file_num))
為了檢驗生成的.txt 文件是否涵蓋所有的圖片路徑
我們可以將.txt文件中記錄的路徑數於目錄下的圖片總數對比,如何獲取.txt文件中的記錄的路徑總數呢
以只讀的方式打開該文件,按行讀取f.readlines(),自動返回一個列表,列表每一個元素則是txt文件中的每一行,返回列表的長度即可
with open(r"val.txt", 'r') as f: lists = f.readlines() print(len(lists))