文档章节

file、os、pickle、shutil、time

eddy_linux
 eddy_linux
发布于 2015/11/16 03:20
字数 1935
阅读 142
收藏 0
点赞 0
评论 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
粉丝 18
博文 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
Python3文件对象

1.文件对象 1.打开文件 open mode mode决定了open的返回值 mode决定了所返回的文件对象的特性 当mode为b的时候,返回的文件对象是以字节为单位操作操作文件的 当mode为t的时候,返回的文件对...

夏洛特_
2016/10/22
8
0
python文件路径操作大全

一、python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法。 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件和目录名:os.lis...

守恒的猫
2016/09/07
15
0
python3基础链接

python3的基础知识都在博客园中链接:1、python之number2、python之Character string3、python之List4、python之tuple5、python之dictionary6、python之set7、python之内置函数8、python之函...

80后小菜鸟
2017/12/16
0
0
python中对文件、文件夹操作时经常用到的os模块和shutil模块常用方法

1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件和目录名:os.listdir() 3.函数用来删除一个文件:os.remove() 4.删除多个目录:os.removedirs...

Galy_绿
2016/03/11
39
0
python下的文件相关操作

python中对文件、文件夹(文件操作函数)涉及到的主要两个模块:os和shutil os是一个基础的文件操作,shutil是一种高层次的文件操作工具 关于os的操作,主要集中在文件、文件夹读取方面 读取...

on2way
2017/04/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部