找回密码
 注册
关于网站域名变更的通知
查看: 374|回复: 1
打印 上一主题 下一主题

给深度学习入门者的Python快速教程基础篇之os模块

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-11-14 10:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
os模块" X6 F* y/ t! t3 b
深度学习中的数据多是文件,所以数据处理阶段和文件相关的操作就非常重要。除了文件IO,Python中一些操作系统的相关功能也能够非常方便地帮助数据处理。想象一下我们有一个文件夹叫做data,下边有3个子文件夹叫做cat,dog和bat,里面分别是猫,狗和蝙蝠的照片。为了训练一个三分类模型,我们先要生成一个文件,里面每一行是文件的路径和对应的标签。定义cat是0,dog是1,bat是2,则可以通过如下脚本:6 k# X) d! f8 W2 V* \9 P/ O# V

" _  B) {' |$ v: m6 o5 I* {import os
# R# f$ j2 B8 O' q1 n
  h9 R6 j* c4 U2 z( p, o4 u# 定义文件夹名称和标签的对应关系
% ]$ i3 V# A8 i% O% E# E: Slabel_map = {8 B1 p* T. P9 \& N; U( M/ J
'cat': 0,
' A" ?) l( X7 U'dog': 1,: X# q! g0 {5 j8 m
'bat': 2
3 c- q5 x5 e/ `$ M* I}$ M0 e+ N- `! a; Y- m# w1 c

* U* T" ^9 h8 v% G9 c2 dwith open('data.txt', 'w') as f:
) r  m& n0 Z; D. m- V. l& u
; b9 L8 A  J: m7 r# 遍历所有文件,root为当前文件夹,dirs是所有子文件夹名,files是所有文件名
/ U7 N: G; v" b4 d2 jfor root, dirs, files in os.walk('data'):" g( c! P" T( P4 l2 w* s2 o
for filename in files:
$ f- d) _, [1 F7 `5 `& Yfilepath = os.sep.join([root, filename]) # 获得文件完整路径2 `/ G* ^0 o# F, R/ U/ N3 y) e
dirname = root.split(os.sep)[-1] # 获取当前文件夹名称
8 ?* j% g+ P  X7 C8 s5 D  Ylabel = label_map[dirname] # 得到标签
) m$ Y7 P- O$ Cline = '{},{}\n'.format(filepath, label)$ S. y! ~- Y5 L: m9 M) X5 k
f.write(line)
5 a# l8 \. {+ Y3 b1 b& X% E$ k* B" \. D. F3 ]3 N- a
其中,os.sep是当前操作系统的路径分隔符,在Unix/Linux中是’/’,Windows中是’\\’。有的时候我们已经有了所有的文件在一个文件夹data下,希望获取所有文件的名称,则可以用os.listdir():! n  q" G& G- `6 H" G
filenames = os.listdir('data')  B5 E4 k1 L& i( }
- H/ s9 j- B8 _
os也提供了诸如拷贝,移动和修改文件名等操作。同时因为大部分深度学习框架最常见的都是在Unix/Linux下使用,并且Unix/Linux的shell已经非常强大(比Windows好用太多),所以只需要用字符串格式化等方式生成shell命令的字符串,然后通过os.system()就能方便实现很多功能,有时比os,还有Python中另一个操作系统相关模块shutil还要方便:
' O3 f- W2 _  ~0 U/ x9 f) `import os, shutil/ k. G  Z- }( ?* B. t* ^

6 x5 U) n% F, bfilepath0 = 'data/bat/IMG_000001.jpg'
5 [, D/ }" G2 l6 y  H& p; e5 Ofilepath1 = 'data/bat/IMG_000000.jpg'( T$ B; q2 d- f+ i, `
: l3 p- r$ e6 O* A$ J- Y: ^
# 修改文件名) ~, U5 P9 g' `: r  }1 ~
os.system('mv {} {}'.format(filepath0, filepath1)). D% w# I0 d: y  ?; x6 v! N
#os.rename(filepath0, filepath1)+ n# ~+ G# G+ y( @% w" y7 T) D# v' X

5 ], E- \; `, w4 G- \1 m# 创建文件夹1 j5 Q  n$ L+ x! F7 F
dirname = 'data_samples'* M5 N! j+ \/ U
os.system('mkdir -p {}'.format(dirname))3 R! i& A( E4 B7 ]
#if not os.path.exists(dirname):+ @+ d- C4 l! q8 @9 P6 }* y
# os.mkdir(dirname)6 q( }% M& U/ S3 ^) ]% A5 I! d
8 _# u$ q/ S' M$ B
# 拷贝文件  ]; d+ W: i) R$ \% L0 x" z
os.system('cp {} {}'.format(filepath1, dirname))
& F+ X! P" B$ s( q6 P#shutil.copy(filepath1, dirname)
1 z; O- ^( S1 ^" Y: ^5 [
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-6 12:54 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表