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