Python中的os.path路径模块中的操作方法总结_python

解析路径
路径解析依赖与os中定义的一些变量:

  • os.sep-路径各部分之间的分隔符。
  • os.extsep-文件名与文件扩展名之间的分隔符。
  • os.pardir-路径中表示目录树上一级的部分。
  • os.curdir-路径中当前目录的部分。

split()函数将路径分解为两个单独的部分,并返回包含这些结果的tuple。第二个元素是路径的最后部分,地一个元素是其他部分。

import os.path
for path in [ '/one/two/three',
        '/one/two/three/',
        '/',
        '.',
        '']:
  print '%15s : %s' % (path, os.path.split(path))

输入参数以os.sep结尾时,最后一个元素是空串。

输出:

 /one/two/three : ('/one/two', 'three')
/one/two/three/ : ('/one/two/three', '')
       / : ('/', '')
       . : ('', '.')
        : ('', '')

basename()函数返回的值等价与split()值的第二部分。

import os.path
for path in [ '/one/two/three',
        '/one/two/three/',
        '/',
        '.',
        '']:
  print '%15s : %s' % (path, os.path.basename(path))

整个路径会剥除到只剩下最后一个元素。

输出:

 /one/two/three : three
/one/two/three/ :
       / :
       . : .
        :

dirname()函数返回分解路径得到的第一部分。

import os.path
for path in [ '/one/two/three',
        '/one/two/three/',
        '/',
        '.',
        '']:
  print '%15s : %s' % (path, os.path.dirname(path))

将basename()与dirname()结合,得到原来的路径。

 /one/two/three : /one/two
/one/two/three/ : /one/two/three
       / : /
       . :
        :

splitext()作用类似与split(),不过它会根据扩展名分隔符而不是目录分隔符来分解路径。import os.path

for path in [ '/one.txt',
        '/one/two/three.txt',
        '/',
        '.',
        ''
        'two.tar.gz']:

  print '%21s : %s' % (path, os.path.splitext(path))

查找扩展名时,只使用os.extsep的最后一次出现。

       /one.txt : ('/one', '.txt')
  /one/two/three.txt : ('/one/two/three', '.txt')
          / : ('/', '')
          . : ('.', '')
      two.tar.gz : ('two.tar', '.gz')

commonprefix()取一个路径列表作为参数,返回一个字符串,表示所有路径中出现的公共前缀。

import os.path
paths = [ '/one/two/three',
      '/one/two/threetxt',
      '/one/two/three/four',]
for path in paths:
  print 'PATH:', path

print
print 'PREFIX:', os.path.commonprefix(paths)

输出:

PATH: /one/two/three
PATH: /one/two/threetxt
PATH: /one/two/three/four

PREFIX: /one/two/three

建立路径
除了分解现有路径外,还需要从其他字符串建立路径,使用join()。

import os.path
for parts in [ ('one', 'two', 'three'),
      ('\one', 'two', 'three'),
      ('/one', '/two', '/three', '/four'),]:

  print parts, ':', os.path.join(*parts)

如果要连接的某个参数以os.sep开头,前面所有参数都会丢弃,参数会返回值的开始部分。

('one', 'two', 'three') : one\two\three
('\\one', 'two', 'three') : \one\two\three
('/one', '/two', '/three', '/four') : /four

规范化路径
使用join()或利用嵌入变量由单独的字符串组合路径时,得到的路径最后可能会有多余的分隔符或者相对路径部分,使用normpath()可以清除这些内容。

import os.path
for path in [ 'one/two/three',
       'one/./two/three',
       'one/../alt/two/three',
       ]:
  print '%20s : %s' % (path, os.path.normpath(path))

可以计算并压缩有os.curdir和os.pardir构成的路径段。

    one/two/three : one\two\three
   one/./two/three : one\two\three
one/../alt/two/three : alt\two\three

要把一个相对路径转换为一个绝对文件名,可以使用abspath()。

import os.path
for path in [ '.',
       '..',
       'one/two/three',
       'one/./two/three',
       'one/../alt/two/three',
       ]:
  print '%20s : %s' % (path, os.path.abspath(path))

结果是从一个文件系统树最顶层开始的完整路径。

          . : C:\Users\Administrator\Desktop
         .. : C:\Users\Administrator
    one/two/three : C:\Users\Administrator\Desktop\one\two\three
   one/./two/three : C:\Users\Administrator\Desktop\one\two\three
one/../alt/two/three : C:\Users\Administrator\Desktop\alt\two\three

文件时间

import os
import time
print 'File:', __file__
print 'Access time:', time.ctime(os.path.getatime(__file__))
print 'Modified time:', time.ctime(os.path.getmtime(__file__))
print 'Change time:', time.ctime(os.path.getctime(__time__))
print 'Size:', os.path.getsize(__file__)

返回访问时间,修改时间,创建时间,文件中的数据量。

测试文件
程序遇到一个路径名,通常需要知道这个路径的一些信息。

import os.path
filename = r'C:\Users\Administrator\Desktop\tmp'
print 'File    :', filename
print 'Is file?   :', os.path.isfile(filename)
print 'Absoulute  :', os.path.isabs(filename)
print 'Is dir?   :', os.path.isdir(filename)
print 'Is link?   :', os.path.islink(filename)
print 'Mountpoint? :', os.path.ismount(filename)
print 'Exists?    :', os.path.exists(filename)
print 'Link Exists? :', os.path.lexists(filename)

所有测试都返回布尔值。

File    : C:\Users\Administrator\Desktop\tmp
Is file?   : False
Absoulute  : True
Is dir?   : True
Is link?   : False
Mountpoint? : False
Exists?    : True
Link Exists? : True

遍历一个目录树

import os
import os.path
import pprint
def visit(arg, dirname, names):
  print dirname, arg
  for name in names:
    subname = os.path.join(dirname, name)
    if os.path.isdir(subname):
      print '%s/' % name
    else:
      print ' %s' % name
  print
if not os.path.exists('example'):
  os.mkdir('example')
if not os.path.exists('example/one'):
  os.mkdir('example/one')
with open('example/one/file.txt', 'wt') as f:
  f.write('i love you')
with open('example/one/another.txt', 'wt') as f:
  f.write('i love you, two')
os.path.walk('example', visit, '(User data)')

会生成一个递归的目录列表。

example (User data)
one/

example\one (User data)
 another.txt
 file.txt

一些实际的用法合集:

#创建文件:
os.mknod("test.txt")    创建空文件
fp = open("test.txt",w)   直接打开一个文件,如果文件不存在则创建文件

#获取扩展名:
>>> os.path.splitext('/Volumes/Leopard/Users/Caroline/Desktop/1.mp4')[1:]
('.mp4',)
>>> os.path.splitext('/Volumes/Leopard/Users/Caroline/Desktop/1.mp4')[1]
'.mp4'

#获取文件名:
>>> print os.path.basename(r'/root/hahaha/123.txt')
123.txt
>>> print os.path.dirname(r'/root/hahaha/123.txt')
/root/hahaha

#判断目录或文件的存在:
>>> os.path.exists('/root/1.py')
True
>>> os.path.exists('/root/')
True
>>> os.path.exists('/root')
True
>>> os.path.isdir('/root')
True

#改变工作目录:
>>> os.chdir('/home')
>>> os.getcwd()
'/home'

#字符串分割:
>>> '/usr/bin/env'.split('/')
['', 'usr', 'bin', 'env']

#获取文件夹大小(Python2.x):
import os
from os.path import join, getsize 

def getdirsize(dir):
  size = 0L
  for root, dirs, files in os.walk(dir):
   size += sum([getsize(join(root, name)) for name in files])
  return size 

if __name__ == '__main__':
  filesize = getdirsize('/tmp')
  print 'There are %.3f' % (filesize/1024/1024), 'Mbytes in /tmp' 

#获取文件夹大小(Python3.x):
import os
from os.path import join, getsize 

def getdirsize(dir):
  size = 0
  for root, dirs, files in os.walk(dir):
   size += sum([getsize(join(root, name)) for name in files])
  return size 

if __name__ == '__main__':
  filesize = getdirsize('/tmp')
  print ('There are ' + str(filesize/1024/1024) + 'Mbytes in /tmp')

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索python
, 目录
, 文件夹
os.path
python os.path模块、python os.path、python os.path.join、python os.path.isdir、python os.path.split,以便于您获取更多的相关知识。

时间: 2024-10-26 05:43:12

Python中的os.path路径模块中的操作方法总结_python的相关文章

Python标准库os.path包、glob包使用实例_python

os.path包 os.path包主要用于处理字符串路径,比如'/home/zikong/doc/file.doc',提取出有用的信息. 复制代码 代码如下: import os.path path = '/home/zikong/doc/file.doc' print(os.path.basename(path))    # 查询路径中包含的文件名 print(os.path.dirname(path))     # 查询路径中包含的目录 info = os.path.split(path) 

Python中内置的日志模块logging用法详解_python

logging模块简介 Python的logging模块提供了通用的日志系统,可以方便第三方模块或者是应用使用.这个模块提供不同的日志级别,并可以采用不同的方式记录日志,比如文件,HTTP GET/POST,SMTP,Socket等,甚至可以自己实现具体的日志记录方式. logging模块与log4j的机制是一样的,只是具体的实现细节不同.模块提供logger,handler,filter,formatter. logger:提供日志接口,供应用代码使用.logger最长用的操作有两类:配置和发

python 打印出所有的对象/模块的属性(实例代码)_python

实例如下: import sys def print_all(module_): modulelist = dir(module_) length = len(modulelist) for i in range(0,length,1): print getattr(module_,modulelist[i]) print_all(sys) 以上这篇python 打印出所有的对象/模块的属性(实例代码)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持. 以上是小编为您精心

如何在DNN模块中插入一个图片--在模块中引用资源文件

DNN永远都是运行在网站的根目录 DNN的设计上最大的特点就是始终是使用一个网站根目录下的Default.aspx文件加载皮肤和模块从而实现整个网站的页面.这也就是说DNN这个Asp.net程序永远是运行在DNN网站的根目录的,所有的资源文件(如:JS文件,图片,CSS)的引用都要从DNN网站的根目录算起. 这么说有点难以理解,举个例子吧: 假设你把DNN安装到了一个虚拟目录下面,比如DotNetNuke_2目录下,那么你输入http://localhost/DotNetNuke_2就可以访问到

Python中os.path的妙用

1.基本知识     os.path在不同的环境中设置文件的路径时作用非常大,我们经常在Django或Flask中都看到它的身影,常用的其实有下面的几个方法: 常用方法 作用 os.path.dirname(__file__) 返回当前python执行脚本的执行路径(看下面的例子),这里__file__为固定参数 os.path.abspath(file) 返回一个文件在当前环境中的绝对路径,这里file 一参数 os.path.join(basedir,file) 将file文件的路径设置为b

Python os.path.help

Help on module posixpath in os:NAME posixpath - Common operations on Posix pathnames.FILE /usr/lib/python2.6/posixpath.pyMODULE DOCS http://docs.python.org/library/posixpathDESCRIPTION Instead of importing this module directly, import os and refer to

require、module、exports dojo中的三个特殊模块标识

查看dojo源码过程中,发现这三个模块名并不以dojo.dijit.dojox开头,在dojo加载器中属于特殊模块名. require 这是一个上下文智能的加载器. 我们通过dojoConfig配置了一个package:myApp,现在对myApp目录下的文件可以使用如下方式请求: // this is "myApp/topLevelHandlers" define(["dojo"], function(dojo){ dojo.connect(dojo.byId(&

WCF版的PetShop之二:模块中的层次划分[提供源代码下载]

上一篇文章主要讨论的是PetShop的模块划分,在这一篇文章中我们来讨论在一个模块中如何进行层次划分.模块划分应该是基于功能的,一个模块可以看成是服务于某项功能的所有资源的集合:层次划分侧重于关注点分离(SoC:Separation of Concern ),让某一层专注于某项单一的操作,以实现重用性.可维护性.可测试性等相应的目的.Source Code从这里下载. 一.基本的层次结构 我们接下来将目光聚焦到模块内部,看看每一个模块具体又有怎样的层次划分.我们将Infrastructures.

Python中os和shutil模块实用方法集…

Python中os和shutil模块实用方法集锦  类型:转载 时间:2014-05-13  这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是 'posix' os.getcwd() 函数得到当前工作目录,即当前Python脚