文件和目录访问--os.path、linecache、shutil

os.path- 通用路径名操作

该模块在路径名上实现了一些有用的功能。
要读取或写入文件open(),请参阅 Python输入、输出------文件读写

os.path.abspath(path): 返回绝对路径
os.path.basename(path): 返回路径名中的文件名称
     (建议,先对path操作:path.strip(os.sep))
os.path.dirname(path): 返回路径名中的目录名称
     (建议,先对path操作:path.strip(os.sep))
os.path.exists(path): 检查路径是否存在,返回True 或 False

os.path.getatime(path): 返回上次访问路径的时间(自纪元以来的秒数)
os.path.getmtime(path): 返回上次修改路径的时间。
os.path.getctime(path): Unix上返回最后一次更改数据的时间,windows返回路径的创建时间。

os.path.getsize(path): 返回路径的大小(以字节为单位)。
os.path.isabs(path): 如果path是绝对路径名,则返回True。

os.path.isfile(path): 判断path是否为现有常规文件,返回True 或 False。
os.path.isdir(path): 判断path是否为目录,返回True 或 False。

os.path.join(path1,path2): 采用串联方式,拼接路径

linecache- 随机访问文本行

源代码: Lib/linecache.py

该模块允许从任何文件获取任何行,同时尝试使用缓存在内部进行优化,这是从单个文件中读取许多行的常见情况。
linecache.getline(filename,lineno [,module_globals ] ):
从名为filename的文件中获取 lineno。

linecache.clearcache(): 清除缓存。若不再需要先前使用的文件中的行,使用此功能。

linecache.checkcache([ filename] ): 检查缓存的有效性。如果缓存中的文件可能已在磁盘上更改,并且您需要更新的版本,请使用此功能。如果省略filename,它将检查缓存中的所有条目。
例:

>>> import linecache
>>> linecache.getline('/etc/passwd', 4)
'sys:x:3:3:sys:/dev:/bin/sh\n'

shutil- 高级文件操作

源代码: Lib/shutil.py
该模块对文件和文件集合提供了许多高级操作。
特别是,提供了支持文件复制和删除的功能。

警告: 即使是更高级别的文件复制功能 shutil.copy(), shutil.copy2() 也无法复制所有文件元数据。

shutil.copyfile(src,dst ): 将src文件的内容(无元数据)复制到dst的文件中 。
dst必须是完整的目标文件名;
如果 src和dst是相同的文件,Error则引发。
目的地位置必须是可写的; 否则,IOError将引发。
如果dst已经存在,它将被替换。

shutil.copymode(src,dst ): 将权限位从src复制到dst。文件内容,所有者和组不受影响。

shutil.copy(src,dst ): 将文件src复制到文件或目录dst。
如果dst是目录, 则在指定的目录中创建(或覆盖)与src具有相同基本名称的文件。
权限位被复制。

shutil.copy2(src,dst ): copy2()用于copystat()复制文件元数据。

shutil.copytree(src,dst,symlinks = False,ignore = None ): 递归复制以src为根的整个目录树。
目标目录(由dst命名)必须不存在; 它将被创建。

shutil.rmtree(path [,ignore_errors [,onerror ] ] ): 删除整个目录树;

shutil.move(src,dst ): 递归地将文件或目录(src)移动到另一个位置(dst)。
如果dst是现有目录,则src将在该目录中移动。
如果目标已存在但不是目录,则可能会根据os.rename()语义覆盖目标。

copytree示例:

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:
                copy2(srcname, dstname)
            # XXX What about devices, sockets etc.?
        except (IOError, os.error) as why:
            errors.append((srcname, dstname, str(why)))
        # catch the Error from the recursive copytree so that we can
        # continue with other files
        except Error as err:
            errors.extend(err.args[0])
    try:
        copystat(src, dst)
    except WindowsError:
        # can't copy file access times on Windows
        pass
    except OSError as why:
        errors.extend((src, dst, str(why)))
    if errors:
        raise Error(errors)

使用ignore_patterns()帮助程序的另一个示例:

from shutil import copytree, ignore_patterns

copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))

这将复制除.pyc的文件和tmp目录之外的所有。

另一个使用ignore参数添加日志记录调用的示例:

from shutil import copytree
import logging

def _logpath(path, names):
    logging.info('Working in %s' % path)
    return []   # nothing will be ignored

copytree(source, destination, ignore=_logpath)
存档操作

shutil模块,还提供了用于创建和读取压缩和归档文件的高级实用程序。
他们依赖于zipfile和tarfile模块。

shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])

创建一个存档文件(例如zip或tar)并返回其名称。

base_name是要创建的文件的名称,包括路径,减去任何特定于格式的扩展名。
format是归档格式:“zip” 或 “tar” 或 “gztar” 或 “bztar”。
root_dir是一个目录,它将成为存档的根目录; 
base_dir是我们开始存档的目录; 

root_dir和base_dir都默认为当前目录。

创建tar存档时使用所有者和组。默认情况下,使用当前所有者和组。
能。

shutil.get_archive_formats(): 返回支持的归档格式列表。返回序列的每个元素都是元组。(name, description)

>>> import shutil
>>> shutil.get_archive_formats()
[('bztar', "bzip2'ed tar-file"), ('gztar', "gzip'ed tar-file"), ('tar', 'uncompr
essed tar file'), ('zip', 'ZIP file')]

默认情况下shutil提供以下格式:
zip: ZIP文件(如果zlib模块或外部zip 可执行文件可用)。
tar: 未压缩的tar文件。
gztar: gzip’ed tar-file(如果zlib模块可用)。
bztar: bzip2’ed tar-file(如果该bz2模块可用)。

版本2.7中的新功能。

shutil.register_archive_format(name, function[, extra_args[, description]])
注册格式名称的归档程序。function是一个可调用的函数,用于调用归档器。

shutil.unregister_archive_format(name): 从支持的格式列表中删除存档格式名称。

存档示例:
在这个例子中,我们创建了一个gzip’ed tar文件存档,其中包含.ssh在用户目录中找到的所有文件:

>>> from shutil import make_archive
>>> import os
>>> archive_name = os.path.expanduser(os.path.join('~', 'myarchive'))
>>> root_dir = os.path.expanduser(os.path.join('~', '.ssh'))
>>> make_archive(archive_name, 'gztar', root_dir)
'/Users/tarek/myarchive.tar.gz'

生成的存档包含:

$ tar -tzvf /Users/tarek/myarchive.tar.gz
drwx------ tarek/staff       0 2010-02-01 16:23:40 ./
-rw-r--r-- tarek/staff     609 2008-06-09 13:26:54 ./authorized_keys
-rwxr-xr-x tarek/staff      65 2008-06-09 13:26:54 ./config
-rwx------ tarek/staff     668 2008-06-09 13:26:54 ./id_dsa
-rwxr-xr-x tarek/staff     609 2008-06-09 13:26:54 ./id_dsa.pub
-rw------- tarek/staff    1675 2008-06-09 13:26:54 ./id_rsa
-rw-r--r-- tarek/staff     397 2008-06-09 13:26:54 ./id_rsa.pub
-rw-r--r-- tarek/staff   37192 2010-02-06 18:23:10 ./known_hosts
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值