小甲鱼 发表于 2014-4-3 21:33:24

os、os.path 模块中关于文件、目录常用的函数使用方法

我们第一节课就讲过了,Python是跨平台的语言,也即是说同样的源代码在不同的操作系统不需要修改就可以同样实现。

因此Python的作者就倒腾了OS模块这么一个玩意儿出来,有了OS模块,我们不需要关心什么操作系统下使用什么模块,OS模块会帮你选择正确的模块并调用。


os模块中关于文件/目录常用的函数使用方法


函数名使用方法
getcwd()
返回当前工作目录

chdir(path)
改变工作目录

listdir(path='.')
列举指定目录中的文件名('.'表示当前目录,'..'表示上一级目录)

mkdir(path)
创建单层目录,如该目录已存在抛出异常

makedirs(path)
递归创建多层目录,如该目录已存在抛出异常,注意:'E:\\a\\b'和'E:\\a\\c'并不会冲突

remove(path)
删除文件

rmdir(path)
删除单层目录,如该目录非空则抛出异常

removedirs(path)
递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常

rename(old, new)
将文件old重命名为new

system(command)
运行系统的shell命令

walk(top)
遍历top路径以下所有的子目录,返回一个三元组:(路径, [包含目录], [包含文件])【具体实现方案请看:第30讲课后作业^_^】

以下是支持路径操作中常用到的一些定义,支持所有平台
os.curdir
指代当前目录('.')

os.pardir
指代上一级目录('..')

os.sep
输出操作系统特定的路径分隔符(Win下为'\\',Linux下为'/')

os.linesep
当前平台使用的行终止符(Win下为'\r\n',Linux下为'\n')

os.name
指代当前使用的操作系统(包括:'posix','nt', 'mac', 'os2', 'ce', 'java')




os.path模块中关于路径常用的函数使用方法


函数名使用方法
basename(path)
去掉目录路径,单独返回文件名

dirname(path)
去掉文件名,单独返回目录路径

join(path1[, path2[, ...]])
将path1, path2各部分组合成一个路径名

split(path)
分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在

splitext(path)
分离文件名与扩展名,返回(f_name, f_extension)元组

getsize(file)
返回指定文件的尺寸,单位是字节

getatime(file)
返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)

getctime(file)
返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)

getmtime(file)
返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)

以下为函数返回 True 或 False
exists(path)
判断指定路径(目录或文件)是否存在

isabs(path)
判断指定路径是否为绝对路径

isdir(path)
判断指定路径是否存在且是一个目录

isfile(path)
判断指定路径是否存在且是一个文件

islink(path)
判断指定路径是否存在且是一个符号链接

ismount(path)
判断指定路径是否存在且是一个挂载点

samefile(path1, paht2)
判断path1和path2两个路径是否指向同一个文件



福禄娃娃 发表于 2014-4-3 22:43:44

真强大,:lol:
rename(1.MP3, 1.txt)

kuangkuang 发表于 2014-4-6 19:48:14

为什么用os.path模块中函数时,不需要事先导入模块吗?

小甲鱼 发表于 2014-4-6 20:43:56

kuangkuang 发表于 2014-4-6 19:48 static/image/common/back.gif
为什么用os.path模块中函数时,不需要事先导入模块吗?

import os的时候已经导入了

kuangkuang 发表于 2014-4-6 22:07:42

小甲鱼 发表于 2014-4-6 20:43 static/image/common/back.gif
import os的时候已经导入了

谢谢,小甲鱼老湿的热心回答。不过,我还是有点疑惑,想问一下,os.path模块是不是os模块中的一部分,所以,在导入os模块时,已经把os.path模块一并导入python了,因此,在使用os.path模块中的函数时,就不需要重新导入了(当然如果我再次导入os.path是不是也没有错误啊)。这样理解对吗?

小甲鱼 发表于 2014-4-7 15:06:01

kuangkuang 发表于 2014-4-6 22:07 static/image/common/back.gif
谢谢,小甲鱼老湿的热心回答。不过,我还是有点疑惑,想问一下,os.path模块是不是os模块中的一部分,所以 ...

嗯啊,os里包含了os.path模块。

zhaopengfei 发表于 2014-7-8 21:27:21

真心强大啊,不过太多了,记不住。

005SR 发表于 2014-7-22 15:06:41

这么专业啊

005SR 发表于 2014-7-22 16:42:35

这个太帅了

gavinlimliu 发表于 2014-8-10 12:42:58

great,thanks!

noroot 发表于 2014-8-12 13:29:57

学习中……多谢整理和分享!{:1_1:}{:1_1:}

wei_Y 发表于 2014-8-31 11:55:44

这才发现这个。看答案有os模块还百度了一番- -。。

macchen 发表于 2014-9-12 10:16:13

{:5_91:}OS,sys好用的两大系统模块。

甜心卜乙 发表于 2014-10-13 14:53:52

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# encoding: utf-8
__author__ = 'sweet'
import os
import os.path

def Renamefiles(srcdir,prefix):
    srcfiles=os.listdir(srcdir)
    index =1
    for srcfile in srcfiles:
      srcfilename=os.path.splitext(srcfile)
      sufix=os.path.splitext(srcfile)
      destfile=srcdir+'//'+prefix+'_%04d'%(index)+sufix
      srcfile=os.path.join(srcfile,destfile)
      os.rename(srcfile,destfile)
      index+=1



if __name__ == '__main__':
    srcdir="F://python"
    prefix="test"
    Renamefiles(srcdir,prefix)
   

上述代码在pycharm中运行出错,出错提示:os.rename(srcfile,destfile)={WindowsError}
求小鱼儿或者鱼油帮忙解答

飞不过沧海 发表于 2014-11-21 10:19:21

相见恨晚呐!不过我没有鱼币啊

渗透小牛 发表于 2014-11-26 12:53:48

好强大

戴宇轩 发表于 2014-12-5 18:14:45

>>> import os
>>> os
<module 'os' from '/private/var/mobile/Containers/Bundle/Application/B52C7376-D34D-460E-AB7D-BBD110828D55/Pythonista.app/pylib/os.py'>
>>> os.path
<module 'posixpath' from '/private/var/mobile/Containers/Bundle/Application/B52C7376-D34D-460E-AB7D-BBD110828D55/Pythonista.app/pylib/posixpath.py'>

戴宇轩 发表于 2014-12-5 18:17:26

本帖最后由 戴宇轩 于 2014-12-5 18:22 编辑

小甲鱼 发表于 2014-4-7 15:06
嗯啊,os里包含了os.path模块。
为什么我的分两个模块?os.path就是posixpath?
(我用的是类Unix的一员---iOS)>>> import os
>>> os.path
<module 'posixpath' from '/private/var/mobile/Containers/Bundle/Application/B52C7376-D34D-460E-AB7D-BBD110828D55/Pythonista.app/pylib/posixpath.py'>
>>> import posixpath
>>> posixpath
<module 'posixpath' from '/private/var/mobile/Containers/Bundle/Application/B52C7376-D34D-460E-AB7D-BBD110828D55/Pythonista.app/pylib/posixpath.py'>


煈愛 发表于 2015-1-15 20:43:50

:lol:大爱小甲鱼!

python001 发表于 2015-1-29 11:24:44

收藏
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: os、os.path 模块中关于文件、目录常用的函数使用方法