1. 程式人生 > >優達學城(Udacity)深度學習筆記-1.Python&os學習

優達學城(Udacity)深度學習筆記-1.Python&os學習

歡迎使用Markdown編輯器寫部落格

Python對於檔案操作非常方便,很大一部分是因為os這個庫,在做優達城深度學習作業的時候裡面有一堆os,各種列表推導式混合os.path,一下就繞暈了。這裡做點筆記,方便自己學習&複習。

我的目錄
如上圖,我當前目錄是/home/mao/tensorflow-master/tensorflow/examples/udacity

在我當前目錄下有
這裡寫圖片描述

1.os.path.exists('notMNIST_large')
返回True

2.os.stat('notMNIST_large.tar.gz')
返回的答案是posix.stat_result(st_mode=33270, st_ino=1448325, st_dev=2049, st_nlink=1, st_uid=1000, st_gid=1000, st_size=247336696, st_atime=1484708728, st_mtime=1484663203, st_ctime=1484708728)

其中st_size是該檔案的大小,單位是Byte

3.os.path.splitext('notMNIST_large.tar.gz')
返回的是('notMNIST_large.tar', '.gz')

4.os.path.join('notMNIST_large', 'A')
返回的是 ‘notMNIST_large/A’

5.os.listdir('notMNIST_large')
返回的是該路徑下所有檔名字
['I',
'E.pickle',
'B',
'A.pickle',
'G',
'D.pickle',
'J',
'F',
'E',
'G.pickle',
'J.pickle',
'C',
'D',
'H.pickle',
'B.pickle',
'I.pickle',
'A',
'C.pickle',
'H',
'F.pickle']

6.來個列表推導式和os混合起來的爽一爽

root = os.path.splitext(os.path.splitext('notMNIST_large')[0])[0]
[os.path.join(root, d) for d in sorted(os.listdir(root)) if os.path.isdir(os.path.join(root, d))]

分析一下:首先是 這個root的答案是notMNIST_large,因為內層的splitext[0]的結果是notMNIST_large.tar,然後外層的splitext[0]的結果是notMNIST

接著我們看列表推導式這裡:
先看for d in sorted(os.listdir(root))

,這個的結果是把notMNIST_large下面的所有檔案資料夾按照順序排列好賦給d。
答案是

A
A.pickle
B
B.pickle
C
C.pickle
D
D.pickle
E
E.pickle
F
F.pickle
G
G.pickle
H
H.pickle
I
I.pickle
J
J.pickle

然後看我們的if約束條件 ,說的是if os.path.isdir(os.path.join(root,d)),最內層os.path.join(root,d)的結果是 notMNIST/A notMNIST/A.pickle …… 然後os.path.isdir()來判斷這些是不是dir,是的話對應位置就是true,否則就是false。

所以這個列表推導式for 後面的結果就是A B ……J,最終這個列表推導式的結果就是notMNIST/A , notMNIST/B ……