python os模块/sys模块

  • os.listdir(‘dirname’) 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
###可以使用os模块下的几个方法组合起来进行遍历。
import os
s = os.sep
root = "d:" + s + "ll" + s
for i in os.listdir(root):
    if os.path.isfile(os.path.join(root,i)):
        print i
>>> os.listdir(os.getcwd())
['Django', 'DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'MySQL-python-wininst.log', 'NEWS.txt', 'PIL-wininst.log', 'python.exe', 'pythonw.exe', 'README.txt', 'RemoveMySQL-python.exe', 'RemovePIL.exe', 'Removesetuptools.exe', 'Scripts', 'setuptools-wininst.log', 'tcl', 'Tools', 'w9xpopen.exe']
  • os.linesep字符串给出当前平台使用的行终止符
>>> os.linesep
'\r\n'            #Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'。
>>> os.sep
'\\'              #Windows
  • os.name——判断现在正在实用的平台,Windows 返回 ‘nt’; Linux 返回’posix’
  • os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
  • os.chdir(“dirname”) 改变当前脚本工作目录;相当于shell下cd
  • os.curdir 返回当前目录: (‘.’)
  • os.pardir 获取当前目录的父目录字符串名:(‘…’)
  • 获取项目根目录:
# 两个都返回都是根目录
BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  • os.makedirs(‘dirname1/dirname2’) 可生成多层递归目录

  • os.removedirs(‘dirname1’) 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推

  • os.mkdir(‘dirname’) 生成单级目录;相当于shell中mkdir dirname

  • os.rmdir(‘dirname’) 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname

  • os.walk方法
    walk(top, topdown=True, onerror=None, followlinks=False)
    top – 根目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】。
    topdown --可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。
    onerror – 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。
    followlinks – 设置为 true,则通过软链接访问目录。
    方法:os.walk(path),遍历path,返回一个对象,他的每个部分都是一个三元组,(‘目录x’,[目录x下的目录list],目录x下面的文件)

# 一般删除文件时使用os库,然后利用os.remove(path)即可完成删除,如果删除空文件夹则可使用os.removedirs(path)即可, 
# 但是如果需要删除整个文件夹,且文件夹非空时使用os.removedirs(path)就会报错了,此时可以使用shutil库,该库为python内置库,是一个对文件及文件夹高级操作的库,可以与os库互补完成一些操作,如文件夹的整体复制,移动文件夹,对文件重命名等。
import os
import shutil

os.remove(path)   #删除文件
os.removedirs(path)   #删除空文件夹

shutil.rmtree(path)    #递归删除文件夹
######## 读取文件夹下所有文件
try:  
    source_dir = '/dir/source/'  
    target_dir = '/dir/old/'  
    for root, sub_dirs, files in os.walk(source_dir):  
        for special_file in files:  
            spcial_file_dir = os.path.join(root, special_file)  
            # 打开文件的两种方式  
            # 1.文件以绝对路径方式  
            with open(spcial_file_dir) as source_file:  
            # 2.文件以相对路径方式  
            # with open(r'dir_test/test.txt') as source_file:  
                for line in source_file:  
                    # do something  
            # 移动文件  
            shutil.move(spcial_file_dir, target_dir)  
            logger.info(u'文件%s移动成功'% spcial_file_dir)  
    return HttpResponse(json.dumps({'result':0}))  
except Exception as e:  
    # do something  
import os
    from os.path import join, getsize
    for root, dirs, files in os.walk('python/Lib/email'):
        print root, "consumes",
        print sum([getsize(join(root, name)) for name in files]),
        print "bytes in", len(files), "non-directory files"
        if 'CVS' in dirs:
            dirs.remove('CVS')  # don't visit CVS directories

  • os.remove() 删除一个文件
  • os.rename(“oldname”,“newname”) 重命名文件/目录
  • os.stat(‘path/filename’) 获取文件/目录信息
  • os.symlink(src, dst) 创建符号链接,源需绝对路径—在数据预处理时可节省空间
    src - 这是来源路径。
    dest - 这是原来不存在的目标路径。
import os
import shutil
train_filenames = os.listdir('train')
train_cat = filter(lambda x:x[:3] == 'cat', train_filenames)
train_dog = filter(lambda x:x[:3] == 'dog', train_filenames)
def rmrf_mkdir(dirname):
    if os.path.exists(dirname):
        shutil.rmtree(dirname)
    os.mkdir(dirname)

rmrf_mkdir('train2')
os.mkdir('train2/cat')
os.mkdir('train2/dog')

rmrf_mkdir('test2')
os.symlink('../test/', 'test2/test')

for filename in train_cat:
    os.symlink('../../train/'+filename, 'train2/cat/'+filename)

for filename in train_dog:
    os.symlink('../../train/'+filename, 'train2/dog/'+filename)

  • os.utime() 修改时间属性
  • os.system() 运行shell命令。
>>> os.system('dir')
0
>>> os.system('python') #启动python
>>> os.system('cmd') #启动dos
  • os.environ 获取系统环境变量
import os

os.environ["CUDA_VISIBLE_DEVICES"] = "0"  # 或 os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3" 
# 如果是在终端中运行python程序,使用命令:CUDA_VISIBLE_DEVICES=0 python filename.py即可

# 或者
def set_gpus(gpu_index):
    if type(gpu_index) == list:
        gpu_index = ','.join(str(_) for _ in gpu_index)
    if type(gpu_index) ==int:
        gpu_index = str(gpu_index)
    os.environ["CUDA_VISIBLE_DEVICES"] = gpu_index
  • os.access(‘pathfile’,os.W_OK) 检验文件权限模式,输出True,False
  • os.chmod(‘pathfile’,os.W_OK) 改变文件权限模式

os.path常用模块详解

  • os.path.join(path1[, path2[, …]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
>>> os.path.join('c:\\Python','a.txt')
'c:\\Python\\a.txt'
>>> os.path.join('c:\\Python','f1')
'c:\\Python\\f1'
  • os.path.abspath(path) 返回path规范化的绝对路径
>>> import os.path
>>> os.path.abspath('c.py')
'/root/py/c.py'
>>> os.path.abspath('../py/c.py')
'/root/py/c.py'
  • os.path.getsize(name):获得文件大小,如果name是目录返回0L
  • os.path.split(path) 将path分割成目录和文件名二元组返回
>>> os.path.split('/root/py/c.py')
('/root/py', 'c.py')
>>> os.path.split('/root/py/')
('/root/py', '')
  • os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
>>> os.path.dirname('/root/py/c.py')
'/root/py'
>>> os.path.dirname('c.py')
''
  • os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
>>> os.path.basename('/root/py/c.py')
'c.py'
>>> os.path.basename('/root/py')
'py'
  • os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
#判断文件是否存在
import os
os.path.exists(test_file.txt)
#True
 
os.path.exists(no_exist_file.txt)
#False

#判断文件夹是否存在

import os
os.path.exists(test_dir)
#True
 
os.path.exists(no_exist_dir)
#False

可以看出用os.path.exists()方法,判断文件和文件夹是一样。
其实这种方法还是有个问题,假设你想检查文件“test_data”是否存在,但是当前路径下有个叫“test_data”的文件夹,这样就可能出现误判。为了避免这样的情况,可以这样:

只检查文件

import os
os.path.isfile("test-data")

通过这个方法,如果文件”test-data”不存在将返回False,反之返回True。
  • os.path.isabs(path) 如果path是绝对路径,返回True

  • os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False

  • os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False

  • os.path.normcase(path) 在Linux下,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为反斜杠

  • os.path.splitdrive(path) 拆分驱动器名和路径,主要对win,对linux元组第一个总是空的

>>> os.path.splitdrive('c:\\windows')
('c:', '\\windows')
  • os.path.splitext(path) 分离文件名与扩展名;默认返回(fname,fextension)元组,可做分片操作 ,以“.”为分隔符
>>> os.path.splitext('/root/py/c.py')
('/root/py/c', '.py')
  • os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
  • os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
  • os.path.walk(top,func,arg)
    top表示需要遍历的目录树的路径
    func表示回调函数,对遍历路径进行处理.所谓回调函数,是作为某个函数的参数使用,当某个时间触发时,程序将调用定义好的回调函数处理某个任务.回调函数必须提供3个参数:第1个参数为walk()的参数tag,第2个参数表示目录列表,第3个参数表示文件列表
    arg是传递给回调参数func的元组.回调函数的一个参数必须是arg,为回调函数提供处理参数.参数arg可以为空
>>> import os
>>> def VisitDir(arg,dirname,names):
... for filespath in names:
...  print os.path.join(dirname,filespath)
...
>>> path='/root/py/wd/chat'
>>> os.path.walk(path,VisitDir,())
/root/py/wd/chat/chat_server.py
/root/py/wd/chat/chat_client.py
/root/py/wd/chat/test
/root/py/wd/chat/test/linuxeye
/root/py/wd/chat/test/test2
/root/py/wd/chat/test/test3
/root/py/wd/chat/test/test2/asdf
/root/py/wd/chat/test/test3/sdfaxx\

os.path.walk()与os.walk()产生的文件名列表并不相同。os.path.walk()产生目录树下的目录路径和文件路径,而os.walk()只产生文件路径

os.path.getatime(path)  #返回最后一次进入此path的时间。
os.path.getmtime(path)  #返回在此path下最后一次修改的时间。
os.path.getctime(path)  #返回path的大小
os.path.getsize(path)  #返回文件大小,如果文件不存在就返回错误
os.path.islink(path)  #判断路径是否为链接
os.path.ismount(path)  #判断路径是否为挂载点()
os.path.join(path1[, path2[, ...]])  #把目录和文件名合成一个路径
os.path.normcase(path)  #转换path的大小写和斜杠
os.path.normpath(path)  #规范path字符串形式
os.path.realpath(path)  #返回path的真实路径
os.path.relpath(path[, start])  #从start开始计算相对路径
os.path.samefile(path1, path2)  #判断目录或文件是否相同
os.path.sameopenfile(fp1, fp2)  #判断fp1和fp2是否指向同一文件


sys

sys.path.append()

import sys
sys.path

sys.path 返回的是一个列表!
该路径已经添加到系统的环境变量了,当我们要添加自己的搜索目录时,可以通过列表的append()方法;

对于模块和自己写的脚本不在同一个目录下,在脚本开头加sys.path.append(‘xxx’):
当我们导入一个模块时:import xxx,默认情况下python解析器会搜索当前目录、已安装的内置模块和第三方模块,搜索路径存放在sys模块的path中:

import sys
sys.path.append(’yourpath')

这种方法是运行时修改,脚本运行后就会失效的。

sys.path.append(‘yourpath’)。
sys.path.insert(0,‘yourpath’)
永久添加路径到sys.path中,方式有三,如下:
1)将写好的py文件放到 已经添加到系统环境变量的 目录下 ;

在 /usr/lib/python2.6/site-packages 下面新建一个.pth 文件(以pth作为后缀名)
将模块的路径写进去,一行一个路径,如: vim pythonmodule.pth
/home/root/ENV
使用PYTHONPATH环境变量
export PYTHONPATH=$PYTHONPATH:/home/root/ENV

os.chdir(path)
os.chdir(path)改变当前工作目录为path目录,可以读写目录中的文件,但不能import目录中的模块和包。
这时会报No module name XXX错误,其实就是找不到包或模块的原因。
只要加上sys.path.append(path)就可以了。

sys.path.insert
可以选择用sys.path.insert(0,yourpath),这样新添加的目录会优先于其他目录被import检查

import os
import sys
sys.path.insert(0, '/home/users/myname/env/mxnet_nnvm/python')
import mxnet as mx
  1. 加入上层目录和绝对路径
import sys
sys.path.append('..') #表示导入当前文件的上层目录到搜索路径中
sys.path.append('/home/model') # 绝对路径
from folderA.folderB.fileA import functionA
  1. 加入当前目录
import os,sys
sys.path.append(os.getcwd())
  1. 定义搜索优先顺序
import sys
sys.path.insert(1, "./model")

sys.path.insert(1, “./crnn”)定义搜索路径的优先顺序,序号从0开始,表示最大优先级,sys.path.insert()加入的也是临时搜索路径,程序退出后失效。

你可能感兴趣的:(python模块,python,django,windows)