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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
os模块
) V% i: ^$ L# z8 K( T; ^. M深度学习中的数据多是文件,所以数据处理阶段和文件相关的操作就非常重要。除了文件IO,Python中一些操作系统的相关功能也能够非常方便地帮助数据处理。想象一下我们有一个文件夹叫做data,下边有3个子文件夹叫做cat,dog和bat,里面分别是猫,狗和蝙蝠的照片。为了训练一个三分类模型,我们先要生成一个文件,里面每一行是文件的路径和对应的标签。定义cat是0,dog是1,bat是2,则可以通过如下脚本:
1 Z$ z% n0 {; |' u% C0 e
" T# n0 i& \2 g; [8 s, Timport os
- x8 Q0 ~' L- @5 ^: X
# w/ B/ L% W0 f4 e# 定义文件夹名称和标签的对应关系9 k- m5 H" @- F6 W# |. y  ?
label_map = {2 i. R( M& ?  i: N& W
'cat': 0," T8 L: q' x! E6 [$ |
'dog': 1,
) V$ D! @2 P" T# v( S, v'bat': 2
, y! P( [- p7 E# ]}: w% X& F6 u$ y& e
6 A* j# n+ W2 k# R) j0 o5 h
with open('data.txt', 'w') as f:
1 g' L  S1 T7 F3 i6 T1 k
% e' c1 r5 M) f/ M+ F& y# 遍历所有文件,root为当前文件夹,dirs是所有子文件夹名,files是所有文件名$ ?% K7 [; c+ q& d& e- Q
for root, dirs, files in os.walk('data'):
) E2 C9 C8 N1 j2 v8 Z, wfor filename in files:
9 l6 f# P4 l" wfilepath = os.sep.join([root, filename]) # 获得文件完整路径
" x3 v% G" k) p" d0 j+ ~dirname = root.split(os.sep)[-1] # 获取当前文件夹名称+ @+ \- Q9 `" j* b
label = label_map[dirname] # 得到标签
  Z1 Q% h$ }1 y5 a$ Nline = '{},{}\n'.format(filepath, label)+ o' D3 M% L, O2 i4 H# l
f.write(line)
( ]; V2 c8 t  _, d* e7 }# i
7 g; S6 Z! h$ W! b9 Q( Q* L其中,os.sep是当前操作系统的路径分隔符,在Unix/Linux中是’/’,Windows中是’\\’。有的时候我们已经有了所有的文件在一个文件夹data下,希望获取所有文件的名称,则可以用os.listdir():
. o# j' i3 i6 pfilenames = os.listdir('data')8 `/ K& v3 d9 n: u4 F2 P. V+ G5 @' q8 A
; Q% x8 ^: i4 C6 f0 O: w' m
os也提供了诸如拷贝,移动和修改文件名等操作。同时因为大部分深度学习框架最常见的都是在Unix/Linux下使用,并且Unix/Linux的shell已经非常强大(比Windows好用太多),所以只需要用字符串格式化等方式生成shell命令的字符串,然后通过os.system()就能方便实现很多功能,有时比os,还有Python中另一个操作系统相关模块shutil还要方便:
7 ?4 h' P- J8 y% T1 H) [8 |8 Q" Rimport os, shutil
+ m, |- z. p1 x1 l, c2 u$ J8 S+ t
filepath0 = 'data/bat/IMG_000001.jpg'7 ?' ~, B4 t* o! g  x
filepath1 = 'data/bat/IMG_000000.jpg'4 g1 `4 F7 u- Y: Z, o0 y' G7 S
3 _- U3 o9 ]! ]) ~& K$ D# c" W
# 修改文件名3 @* X7 L  f) t, B
os.system('mv {} {}'.format(filepath0, filepath1))
% P8 f. ~; X3 p7 i: I5 h# u9 ~: ?. ?# K#os.rename(filepath0, filepath1)0 p# K) i+ T0 V

4 U$ ^( X) s* ?  [# 创建文件夹
, r2 @( d: U9 O* @0 _6 udirname = 'data_samples'$ f2 H% U* j3 k  \
os.system('mkdir -p {}'.format(dirname))
  z% D9 A$ ~! G: _' ~+ J, H#if not os.path.exists(dirname):
% P* D. v# c: ~1 b+ d* a# os.mkdir(dirname)
; a- F$ t$ y# D% q, f& t7 _
, w9 O3 L0 R1 c# B# 拷贝文件7 v! v1 v& ]! j% `  @! B  `( G
os.system('cp {} {}'.format(filepath1, dirname))7 ^, Y' o+ j- w  n& H
#shutil.copy(filepath1, dirname)

# m$ i- V5 D/ h. w- D2 d1 k
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-23 09:20 , Processed in 0.125000 second(s), 24 queries , Gzip On.

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

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

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