file、os、pickle、shutil、time
file、os、pickle、shutil、time
eddy_linux 发表于2年前
file、os、pickle、shutil、time
  • 发表于 2年前
  • 阅读 136
  • 收藏 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)


共有 人打赏支持
粉丝 18
博文 132
码字总数 185568
×
eddy_linux
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: