对文件进行打包操作
import os
import tarfile
#压缩,创建.gz
#创建压缩包名
tar = tarfile.open('/tmp/tartest.tar.gz','w:gz')
# 创建压缩包
for root,dir,files in os.walk("/tmp/tartest"):
print root
print dir
print files
for file in files:
fullpath = os.path.join(root,file)
tar.add(fullpath)
tar.close()
文件的相关操作
os包包括各种各样的函数,以实现操作系统的许多功能。这个包非常庞杂。os包的一些命令就是用于文件管理。我们这里列出最常用的:
mkdir(path) 创建新目录,path为一个字符串,表示新目录的路径。相当于$mkdir命令
rmdir(path) 删除空的目录,path为一个字符串,表示想要删除的目录的路径。相当于$rmdir命令
listdir(path) 返回目录中所有文件。相当于$ls命令。
remove(path) 删除 path指向的文件。
rename(src, dst) 重命名文件,src和dst为两个路径,分别表示重命名之前和之后的路径。
chmod(path, mode) 改变path指向的文件的权限。相当于$chmod命令。
chown(path, uid, gid) 改变path所指向文件的拥有者和拥有组。相当于$chown命令。
stat(path) 查看path所指向文件的附加信息,相当于$ls -l命令。
symlink(src, dst) 为文件dst创建软链接,src为软链接文件的路径。相当于$ln -s命令。
getcwd() 查询当前工作路径 (cwd, current working directory),相当于$pwd命令。
判断路径是不是存在
import os
path = '/test/test1/test2/'
print path
print os.chdir(path)
#print os.chdir('/test/test1/test2')
print os.getcwd()
#判断路径是不是存在
if os.getcwd() == "/test/test1/test2":
print 1
文件的复制和移动shutil包
copy(src, dst) 复制文件,从src到dst。相当于$cp命令。
move(src, dst) 移动文件,从src到dst。相当于$mv命令。
举例
import shutil
shutil.copy('a.txt', 'b.txt')
1、open默认以读模式打开,并且我们打开的,一定是个存在的文件,否则会报错。而这个文件,可以是相对路径,也可以是绝对路径
2、但是我们以写模式打开的时候,如果这个文件不存在,则创建,这里面不会报错
3、文件指针的问题
4、readline和readliens是不用加参数的,不是我们期望的读取几行的结果
5、read函数参数的问题:负数和没有参数是一样的效果
6、close不是必须的,但是我们操作完一个文件的时候尽量去close它
7、可以用+模式解决既可以读,又可以写的问题
8、read模式可以用readline和readliens读一行和读多行,但是write模式只写一行,用writelines
9、在a+模式下,文件指针对写不起作用(一定是在追加),但是对读起作用。注意这里和r+的区别
10、tell()函数返回当前文件指针的位置
11、seek()函数将文件指针移动到指定的位置,如果查找的位置超出了文件的长度,这个时候,仍然是将文件指针指到指定的位置,对于读,相当于是放到了文件末尾,但是写,会补充相应个数的0值,然后在指定的位置写入。如果是负值,则会报参数错误(也就是参数的取值范围是自然数)。
12、在r+模式下,seek可以实现从指定位置修改一个文件
13、在a+模式下,不管怎么移动文件指针,对写都不起作用,写一定还是在文件末尾追加,但是可以通过seek去实现从任意位置的读
14、truncate函数按照指定的字符大小截断源文件
os 模块
os.sep 可以取代操作系统特定的路径分隔符。windows下为 '\\'
os.name 字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是 'posix'
os.getcwd() 函数得到当前工作目录,即当前Python脚本工作的目录路径
os.getenv() 获取一个环境变量,如果没有返回none
os.putenv(key, value) 设置一个环境变量值
os.listdir(path) 返回指定目录下的所有文件和目录名
os.remove(path) 函数用来删除一个文件
os.system(command) 函数用来运行shell命令
os.linesep 字符串给出当前平台使用的行终止符。例如,Windows使用 '\r\n',Linux使用 '\n' 而Mac使用 '\r'
os.path.split(path) 函数返回一个路径的目录名和文件名
os.path.isfile() 和os.path.isdir()函数分别检验给出的路径是一个文件还是目录
os.path.exists() 函数用来检验给出的路径是否真地存在
os.curdir 返回当前目录 ('.')
os.mkdir(path) 创建一个目录
os.makedirs(path) 递归的创建目录
os.chdir(dirname) 改变工作目录到dirname
os.path.getsize(name) 获得文件大小,如果name是目录返回0L
os.path.abspath(name) 获得绝对路径
os.path.normpath(path) 规范path字符串形式
os.path.splitext() 分离文件名与扩展名
os.path.join(path,name) 连接目录与文件名或目录
os.path.basename(path) 返回文件名
os.path.dirname(path) 返回文件路径
os.walk(top,topdown=True,onerror=None) 遍历迭代目录
os.rename(src, dst) 重命名file或者directory src到dst 如果dst是一个存在的directory, 将抛出OSError. 在Unix, 如果dst在存且是一个file, 如果用户有权限的话,它将被安静的替换. 操作将会失败在某些Unix 中如果src和dst在不同的文件系统中. 如果成功, 这命名操作将会是一个原子操作 (这是POSIX 需要). 在 Windows上, 如果dst已经存在, 将抛出OSError,即使它是一个文件. 在unix,Windows中有效。
os.renames(old, new) 递归重命名文件夹或者文件。像rename()
shutil 模块
shutil.copyfile( src, dst) 从源src复制到dst中去。当然前提是目标地址是具备可写权限。抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉
shutil.move( src, dst) 移动文件或重命名
shutil.copymode( src, dst) 只是会复制其权限其他的东西是不会被复制的
shutil.copystat( src, dst) 复制权限、最后访问时间、最后修改时间
shutil.copy( src, dst) 复制一个文件到一个文件或一个目录
shutil.copy2( src, dst) 在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西
shutil.copy2( src, dst) 如果两个位置的文件系统是一样的话相当于是rename操作,只是改名;如果是不在相同的文件系统的话就是做move操作
shutil.copytree( olddir, newdir, True/Flase)
把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接
shutil.rmtree( src ) 递归删除一个目录以及目录内的所有内容