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 ……