文档章节

file、os、pickle、shutil、time

eddy_linux
 eddy_linux
发布于 2015/11/16 03:20
字数 1935
阅读 146
收藏 0
文件对象:
	文本都是字节序列	
	var_name = open (file_name[mode,[bufsize]])
	mode:
		r
		w
		a
		r+
		w+
		a+

	b表示已二进制模式打开文件
		rb
		wb
		ab
		rb+
		wb+
		ab+
	缓存:
		0表示不使用缓存
		负数表示使用系统默认的缓存
		1表示使用缓存
		整数表示使用大小的缓冲区
	file.seek(offset[whence])
		whence:起点
			0:从文件头
			1:从当前位置
			2:从文件尾
		offset:偏移量
	f1.seek(0,2)
	跳转到文件末尾了
	f1.tell()
	f1.write('aaa\n')	
	f1 = open('/var/log/messages','r')
	f1.read(10)
	'Nov 15 03:'
	f1.tell()
        10
        f1.next()
        "Nov 15 13:14:24 iZ23tags5s2Z abrt: detected unhandled Python exception in '3.py'\n"
        f1.name
        '/var/log/messages'
        f1.flush()刷新内容到磁盘
        f1.readline()读取一行
        f1.readlines()读取所有行
        f1.writelines()写入所有
        f1.truncate()截取
        f1.close()关闭
        f1.closed是否关闭这是属性
        
	文件系统模块:os
	目录:
		chdir():切换工作目录
		chroot():设定当前进程的根目录
		listdir():列出指定目录下的所有文件名
		mkdir():创建指定目录
		makedirs():创建多久目录
		getcwd():获取工作目录
		rmdir():删除目录
		removedirs():删除多级目录
	文件:
		mkfifo():创建管道
		mknod():创建设备文件
		remove():删除文件
		unlink():删除链接文件
		rename():重命名
		stat():放回文件的状态信息
		symlink():创建链接文件
		utime():更新时间戳
		tmpfile():创建并打开(w+b)一个新的临时文件
		walk():创建目录树
	访问权限相关的
		access():检验某个用户或用户组的权限模式
		chmod():修改权限
		chown():修改属主和属组
		umask():设置默认权限模式
	文件描述符:
		open():底层操作系统的open()
		read():
		write():
	设备文件:
		makedev():
		major():获取主设备号
		minor():获取次设备号
	路径管理:
		import os.path
		basename():路径基名
		dirname():路径目录名
		join():整合文件名
		split():返回dirname(),basename()元组
		splitext():返回(filename,extension)元组
		信息:
			getatime()
			getctime()
			getmtime()
			getsize():返回文件的大小
		查询
			exists():判断指定文件是否存在
			isabs():判断指定的路径是否为绝对路径
			isdir():是否为目录
			isfile():是否为文件
			islink():是否为符号链接
			ismount():是否为挂载点
			samefile():两个路径是否指向了同一个文件
			
练习:判断文件是否存在,存在则打开
	让用户通过键盘反复输入多行数据
	追加保存至此文件中
		
#!/usr/bin/python
import os
import os.path
filename=raw_input('plz a file name:')
if os.path.isfile(filename):
        openname= open(filename,'a+')
while True:
        newline=raw_input('plz a line:')
        if newline == 'q' or newline =='quit':
                break
        else:
                openname.write(newline+'\n')
openname.close()

对象持久存储
	pickle
	    pickle.dump: (obj, file, protocol=None)
	    pickle.load: (file)
	marshal
	DBM接口
	shaelve模块
高级的 文件、文件夹、压缩包 处理模块
shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中,可以部分内容	
def copyfileobj(fsrc, fdst, length=16*1024):
    """copy data from file-like object fsrc to file-like object fdst"""
    while 1:
        buf = fsrc.read(length)
        if not buf:
            break
        fdst.write(buf)
shutil.copyfile(src, dst)
拷贝文件
def copyfile(src, dst):
    """Copy data from src to dst"""
    if _samefile(src, dst):
        raise Error("`%s` and `%s` are the same file" % (src, dst))

    for fn in [src, dst]:
        try:
            st = os.stat(fn)
        except OSError:
            # File most likely does not exist
            pass
        else:
            # XXX What about other special files? (sockets, devices...)
            if stat.S_ISFIFO(st.st_mode):
                raise SpecialFileError("`%s` is a named pipe" % fn)

    with open(src, 'rb') as fsrc:
        with open(dst, 'wb') as fdst:
            copyfileobj(fsrc, fdst)
shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变
def copymode(src, dst):    """Copy mode bits from src to dst"""
    if hasattr(os, 'chmod'):
        st = os.stat(src)
        mode = stat.S_IMODE(st.st_mode)
        os.chmod(dst, mode)
shutil.copystat(src, dst)
拷贝状态的信息,包括:mode bits, atime, mtime, flags 
def copystat(src, dst):
    """Copy all stat info (mode bits, atime, mtime, flags) from src to dst"""
    st = os.stat(src)
    mode = stat.S_IMODE(st.st_mode)
    if hasattr(os, 'utime'):
        os.utime(dst, (st.st_atime, st.st_mtime))
    if hasattr(os, 'chmod'):
        os.chmod(dst, mode)
    if hasattr(os, 'chflags') and hasattr(st, 'st_flags'):
        try:
            os.chflags(dst, st.st_flags)
        except OSError, why:
            for err in 'EOPNOTSUPP', 'ENOTSUP':
                if hasattr(errno, err) and why.errno == getattr(errno, err):
                    break
            else:
                raise      
shutil.copy(src, dst)
拷贝文件和权限 
def copy(src, dst):
    """Copy data and mode bits ("cp src dst").

    The destination may be a directory.

    """
    if os.path.isdir(dst):
        dst = os.path.join(dst, os.path.basename(src))
    copyfile(src, dst)
    copymode(src, dst) 
shutil.copy2(src, dst)
拷贝文件和状态信息
def copy2(src, dst):
    """Copy data and all stat info ("cp -p src dst").

    The destination may be a directory.

    """
    if os.path.isdir(dst):
        dst = os.path.join(dst, os.path.basename(src))
    copyfile(src, dst)
    copystat(src, dst)
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件
例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
def ignore_patterns(*patterns):
    def _ignore_patterns(path, names):
        ignored_names = []
        for pattern in patterns:
            ignored_names.extend(fnmatch.filter(names, pattern))
        return set(ignored_names)
    return _ignore_patterns

def copytree(src, dst, symlinks=False, ignore=None):
    names = os.listdir(src)
    if ignore is not None:
        ignored_names = ignore(src, names)
    else:
        ignored_names = set()

    os.makedirs(dst)
    errors = []
    for name in names:
        if name in ignored_names:
            continue
        srcname = os.path.join(src, name)
        dstname = os.path.join(dst, name)
        try:
            if symlinks and os.path.islink(srcname):
                linkto = os.readlink(srcname)
                os.symlink(linkto, dstname)
            elif os.path.isdir(srcname):
                copytree(srcname, dstname, symlinks, ignore)
            else:
                # Will raise a SpecialFileError for unsupported file types
                copy2(srcname, dstname)
        # catch the Error from the recursive copytree so that we can
        # continue with other files
        except Error, err:
            errors.extend(err.args[0])
        except EnvironmentError, why:
            errors.append((srcname, dstname, str(why)))
    try:
        copystat(src, dst)
    except OSError, why:
        if WindowsError is not None and isinstance(why, WindowsError):
            # Copying file access times may fail on Windows
            pass
        else:
            errors.append((src, dst, str(why)))
    if errors:
        raise Error, errors 
shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件
def rmtree(path, ignore_errors=False, onerror=None):
    if ignore_errors:
        def onerror(*args):
            pass
    elif onerror is None:
        def onerror(*args):
            raise
    try:
        if os.path.islink(path):
            # symlinks to directories are forbidden, see bug #1669
            raise OSError("Cannot call rmtree on a symbolic link")
    except OSError:
        onerror(os.path.islink, path, sys.exc_info())
        # can't continue even if onerror hook returns
        return
    names = []
    try:
        names = os.listdir(path)
    except os.error, err:
        onerror(os.listdir, path, sys.exc_info())
    for name in names:
        fullname = os.path.join(path, name)
        try:
            mode = os.lstat(fullname).st_mode
        except os.error:
            mode = 0
        if stat.S_ISDIR(mode):
            rmtree(fullname, ignore_errors, onerror)
        else:
            try:
                os.remove(fullname)
            except os.error, err:
                onerror(os.remove, fullname, sys.exc_info())
    try:
        os.rmdir(path)
    except os.error:
        onerror(os.rmdir, path, sys.exc_info())  
shutil.move(src, dst)  
递归的去移动文件       
def move(src, dst):
    real_dst = dst
    if os.path.isdir(dst):
        if _samefile(src, dst):
            # We might be on a case insensitive filesystem,
            # perform the rename anyway.
            os.rename(src, dst)
            return

        real_dst = os.path.join(dst, _basename(src))
        if os.path.exists(real_dst):
            raise Error, "Destination path '%s' already exists" % real_dst
    try:
        os.rename(src, real_dst)
    except OSError:
        if os.path.isdir(src):
            if _destinsrc(src, dst):
                raise Error, "Cannot move a directory '%s' into itself '%s'." % (src, dst)
            copytree(src, real_dst, symlinks=True)
            rmtree(src)
        else:
            copy2(src, real_dst)
            os.unlink(src) 
shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar
base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:www                        =>保存至当前路径
如:/Users/eddy/www =>保存至/Users/eddy/
format:	压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir:	要压缩的文件夹路径(默认当前目录)
owner:	用户,默认当前用户
group:	组,默认当前组
logger:	用于记录日志,通常是logging.Logger对象    
#将 /Users/eddy/Downloads/test 下的文件打包放置当前程序目录
 
import shutil
ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/eddy/Downloads/test')
 
 
#将 /Users/eddy/Downloads/test 下的文件打包放置 /Users/eddy/目录
import shutil
ret = shutil.make_archive("/Users/eddy/wwwwwwwwww", 'gztar', root_dir='/Users/eddy/Downloads/test')   
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
import zipfile

# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close()

# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall()
z.close()

zipfile 压缩解压
import tarfile

# 压缩
tar = tarfile.open('your.tar','w')
tar.add('/Users/eddy/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
tar.add('/Users/eddy/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
tar.close()

# 解压
tar = tarfile.open('your.tar','r')
tar.extractall()  # 可设置解压地址
tar.close()

tarfile 压缩解压
九、time
时间相关的操作,时间有三种表示方式:
时间戳               1970年1月1日之后的秒,即:time.time()
格式化的字符串    2014-11-11 11:11,    即:time.strftime('%Y-%m-%d')
结构化时间          元组包含了:年、日、星期等... time.struct_time    即:time.localtime() 
print time.time()
print time.mktime(time.localtime())
  
print time.gmtime()    #可加时间戳参数
print time.localtime() #可加时间戳参数
print time.strptime('2014-11-11', '%Y-%m-%d')
  
print time.strftime('%Y-%m-%d') #默认当前时间
print time.strftime('%Y-%m-%d',time.localtime()) #默认当前时间
print time.asctime()
print time.asctime(time.localtime())
print time.ctime(time.time())
  
import datetime
'''
datetime.date:表示日期的类。常用的属性有year, month, day
datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond
datetime.datetime:表示日期时间
datetime.timedelta:表示时间间隔,即两个时间点之间的长度
timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
strftime("%Y-%m-%d")
'''
import datetime
print datetime.datetime.now()
print datetime.datetime.now() - datetime.timedelta(days=5)


© 著作权归作者所有

共有 人打赏支持
eddy_linux
粉丝 21
博文 135
码字总数 188789
作品 0
成都
程序员
私信 提问
python基础学习第六天

6.1 模块说明 6.2 模块 time datetime random os shutil json pickle shelve xml hashlib hmac 模块定义: 模块:从逻辑上来组织python代码(定义变量,函数,类,逻辑,其就是为了实现一个功...

812374156
2017/11/05
0
0
Python3学习笔记10-标准库之正则、时间、路径、文件管理、存储对象

Python有一套很有用的标准库(standard library)。标准库会随着Python解释器,一起安装在你的电脑中的。它是Python的一个组成部分。这些标准库是Python为你准备好的利器,可以让编程事半功倍。...

Corwien
2016/06/10
54
0
Python中常用的模块

Python中常用的模块 1、模块的概述 (1)模块定义:用来从逻辑上组织python代码实现一个功能,本质就是.py结尾的python文件 (2)包:用来从逻辑上组织模块,本质是一个目录(必须带有一个i...

Dayi_123
2017/05/03
0
0
python 操作windows下目录的相关函数

1、os.getcwd() os.chdir(dir) #获取当前目录 ,改变当前目录为dir 2、os.listdir(dir) #获取目录内容,其结果为list类型 3、os.mkdir(dir) #创建目录 4、os.rmdir(dir) # 删除空目录,如果目...

AwesomeQA
2016/07/08
40
0
Python基础-第五天-常用模块

本篇内容: 1.sys模块 2.os模块 3.time模块和datetime模块 4.random模块和string模块 5.shutil模块 6.json模块和pickle模块 7.shelve模块 8.hashlib模块和hmac模块 9.logging模块 10.re模块 ...

习惯_就好
2017/07/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

FinderWeb2.4.9 程序员的看日志利器

FinderWeb2.4.9 程序员的看日志利器 使用方法:管理员登录,分配对应用户的的主机和文件权限即可。 部署方式: 下载并解压到webapps目录即可 http://www.finderweb.net/download/finder-web...

吴伟祥
7分钟前
0
0
PHP的pcntl进程控制教程一(pcntl_fork)

pcntl 简介 PHP的进程控制支持实现了Unix方式的进程创建, 程序执行, 信号处理以及进程的中断。 进程控制不能被应用在Web服务器环境,当其被用于Web服务环境时可能会带来意外的结果。 这份文档...

hansonwong
13分钟前
0
0
php扩展模块安装

11月21日任务 11.32 php扩展模块装安装 /usr/local/php/bin/php -m //查看模块 下面安装一个redis的模块 cd /usr/local/src/ wget https://codeload.github.com/phpredis/phpredis/zip/deve......

zgxlinux
13分钟前
1
0
windows下使用IDEA创建VUE项目

1.环境搭建 1.1检测是否安装好nodejs和npm 检测命令 node -v npm -v 如果没有安装需要先安装 nodejs的下载路径:https://nodejs.org/en/download/ 在Windows上安装时务必选择全部组件,包括勾...

文文1
21分钟前
1
0
Mybatis插件plugin应用测试,替换查询sql

1、新建插件 import org.apache.ibatis.executor.CachingExecutor;import org.apache.ibatis.executor.Executor;import org.apache.ibatis.executor.parameter.ParameterHandler;im......

jcc_codingBoy
25分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部