In [1]: import os
In [2]: os.getcwd() # get current working directory
Out[2]: '/home/ming/桌面/python'
In [18]: os.chdir('../')
In [19]: os.getcwd()
Out[19]: '/home/ming/桌面'
In [3]: os.listdir('../DrClient/')
Out[3]:
['hostinfo.sh',
'201630664345',
'drcomauthsvr',
'debug.log',
'translator',
'DrClientConfig',
'DrClientLinux.rcc',
'privillege.sh',
'drcomauthsvr.drsc',
'DrClientLinux',
'drcomrulesvr.drsc',
'change.sh',
'test_upeate_request']
a. 创建指定的目录,但不会递归创建不存在的父目录
In [4]: os.mkdir('dirA/')
In [5]: os.listdir('.')
Out[5]: ['dirA']
In [6]: os.mkdir('dirB/dirC') # error! dirB尚不存在
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-6-a44e11a81805> in <module>
----> 1 os.mkdir('dirB/dirC') # error! dirB尚不存在
FileNotFoundError: [Errno 2] No such file or directory: 'dirB/dirC'
b. 创建指定的目录,如果父目录不存在,则递归创建父目录
In [7]: os.makedirs('dirB/dirC/dirD')
In [8]: os.listdir('.')
Out[8]: ['dirA', 'dirB']
In [9]: os.walk('dirB')
Out[9]: <generator object walk at 0x7fa7510bb678>
In [10]: for cur_dir, sub_dir, files in os.walk('dirB'):
...: print('当前目录:', cur_dir, '子目录:', sub_dir, '文件:', files)
...:
当前目录: dirB 子目录: ['dirC'] 文件: []
当前目录: dirB/dirC 子目录: ['dirD'] 文件: []
当前目录: dirB/dirC/dirD 子目录: [] 文件: []
a. 删除指定的空目录,不会递归删除空的父目录!
In [16]: os.rmdir('dirB/dirC/dirD')
In [17]: for cur_dir, sub_dir, files in os.walk('dirB'):
...: print('当前目录:', cur_dir, '子目录:', sub_dir, '文件:', files)
...:
当前目录: dirB 子目录: ['dirC'] 文件: []
当前目录: dirB/dirC 子目录: [] 文件: []
# 没有dirD,因为它已被删除
b. 删除指定的空目录,且如果删除该目录后,父目录为空,则递归删除父目录
In [3]: os.removedirs('dirB/dirC')
In [4]: os.listdir('.')
Out[4]: ['dirA']
递归遍历给定路径下所有的文件和文件夹。
这个函数会返回一个生成器,每次调用该生成器会返回一个元组:(当前路径, 当前路径下所有的子目录, 当前路径下所有的文件)。不断递归深入,不断返回这样的元组,直到路径最深处!然后再按照同样的过程遍历另外的子文件夹!也就是说,它是按照深度优先的方式遍历给的路径的。
ming@ming-Aspire-E5-572G:~/桌面/python$ tree d0
d0
├── d10
│ ├── d100
│ │ └── file1000.txt
│ ├── file100.txt
│ └── file101.txt
├── d11
│ ├── file110.txt
│ └── file111.txt
└── file1.txt
3 directories, 6 files
In [7]: for cur_dir, sub_dirs, files in os.walk('d0/'):
...: print('当前目录:', cur_dir, '子目录:', sub_dirs, '文件:', files)
...:
当前目录: d0/ 子目录: ['d10', 'd11'] 文件: ['file1.txt']
当前目录: d0/d10 子目录: ['d100'] 文件: ['file101.txt', 'file100.txt']
当前目录: d0/d10/d100 子目录: [] 文件: ['file1000.txt']
当前目录: d0/d11 子目录: [] 文件: ['file111.txt', 'file110.txt']
可能会引起目录的移动。
In [8]: os.listdir('.')
Out[8]: ['dirA', 'd0']
In [9]: os.rename('dirA', 'DIR_A') # dirA --> DIR_A
In [10]: os.listdir('.')
Out[10]: ['DIR_A', 'd0']
In [11]: os.rename('d0/d10/d100', 'D100') # 会导致目录移动!
In [12]: os.listdir('.')
Out[12]: ['DIR_A', 'D100', 'd0']
In [13]: for cur_dir, sub_dirs, files in os.walk('d0/'):
...: print('当前目录:', cur_dir, '子目录:', sub_dirs, '文件:', files)
...:
...:
当前目录: d0/ 子目录: ['d10', 'd11'] 文件: ['file1.txt']
当前目录: d0/d10 子目录: [] 文件: ['file101.txt', 'file100.txt']
当前目录: d0/d11 子目录: [] 文件: ['file111.txt', 'file110.txt']
In [14]: os.listdir('D100')
Out[14]: ['file1000.txt']
In [15]: os.path.isfile('D100/file1000.txt')
Out[15]: True
In [16]: os.path.isdir('d0/d10')
Out[16]: True
In [18]: os.path.exists('d0/d11')
Out[18]: True
In [19]: os.path.exists('d0/d11/d20')
Out[19]: False
In [20]: os.path.abspath('d0')
Out[20]: '/home/ming/桌面/python/d0'
即使该路径实际上并不存在也OK!
In [21]: os.path.dirname('d0/d10/file101.txt')
Out[21]: 'd0/d10'
In [22]: os.path.basename('d0/d10/file101.txt')
Out[22]: 'file101.txt'
In [23]: os.path.dirname('aaa/bbb/ccc/ddd/eee/fff.txt')
Out[23]: 'aaa/bbb/ccc/ddd/eee'
In [24]: os.path.basename('aaa/bbb/ccc/ddd/eee/fff.txt')
Out[24]: 'fff.txt'
即使该路径实际上并不存在也OK!
In [25]: path = os.path.join('aaa/bbb/ccc', 'file.txt')
In [26]: path
Out[26]: 'aaa/bbb/ccc/file.txt'
In [27]: os.path.splitext('aaa/bbb/ccc/ddd/eee/fff.txt')
Out[27]: ('aaa/bbb/ccc/ddd/eee/fff', '.txt')
In [28]: import shutil
# shutil.copy(srcfile, dstfile) : 复制srcfile文件,并命名为dstfile
In [29]: shutil.copy('d0/file1.txt', 'd0/file2.txt')
Out[29]: 'd0/file2.txt'
In [30]: os.listdir('d0/')
Out[30]: ['d10', 'file1.txt', 'd11', 'file2.txt']
# shutil.copy(srcfile, path) : 复制srcfile文件到path路径下
In [31]: shutil.copy('d0/file1.txt', '..')
Out[31]: '../file1.txt'
In [36]: os.listdir('..')
Out[36]: ['file1.txt', 'DrClient', '.ipynb_checkpoints', 'python']
# shutil.copytree(srcDir, dstDir) : 递归地复制srcDir目录,并命名为dstDir;dstDir不能是已经存在的!
In [37]: shutil.copytree('d0/', 'D0')
Out[37]: 'D0'
In [39]: for cur_dir, sub_dirs, files in os.walk('D0/'):
...: print('当前目录:', cur_dir, '子目录:', sub_dirs, '文件:', files)
...:
...:
当前目录: D0/ 子目录: ['d10', 'd11'] 文件: ['file1.txt', 'file2.txt']
当前目录: D0/d10 子目录: [] 文件: ['file101.txt', 'file100.txt']
当前目录: D0/d11 子目录: [] 文件: ['file111.txt', 'file110.txt']
# shutil.move(srcfile, dstfile) : 移动srcfile文件并命名为dstfile,相当于文件重命名
In [40]: shutil.move('d0/file1.txt', 'd0/FILE1.txt')
Out[40]: 'd0/FILE1.txt'
In [41]: os.listdir('d0')
Out[41]: ['FILE1.txt', 'd10', 'd11', 'file2.txt']
# shutil.move(srcfile, path) : 移动srcfile文件到path路径下
In [43]: shutil.move('d0/file2.txt', '.')
Out[43]: './file2.txt'
In [44]: os.listdir('.')
Out[44]: ['DIR_A', 'D100', 'd0', 'D0', 'file2.txt']
# shutil.move(srcDir, dstDir) : 移动srcDir目录(包括其子目录和文件)到dstDir目录下
In [45]: shutil.move('d0', 'D0')
Out[45]: 'D0/d0'
In [46]: for cur_dir, sub_dirs, files in os.walk('D0/'):
...: print('当前目录:', cur_dir, '子目录:', sub_dirs, '文件:', files)
...:
当前目录: D0/ 子目录: ['d10', 'd0', 'd11'] 文件: ['file1.txt', 'file2.txt']
当前目录: D0/d10 子目录: [] 文件: ['file101.txt', 'file100.txt']
当前目录: D0/d0 子目录: ['d10', 'd11'] 文件: ['FILE1.txt']
当前目录: D0/d0/d10 子目录: [] 文件: ['file101.txt', 'file100.txt']
当前目录: D0/d0/d11 子目录: [] 文件: ['file111.txt', 'file110.txt']
当前目录: D0/d11 子目录: [] 文件: ['file111.txt', 'file110.txt']