对文件进行打包操作
import osimport tarfile#压缩,创建.gz#创建压缩包名tar = tarfile.open(‘/tmp/tartest.tar.gz‘,‘w:gz‘)# 创建压缩包for root,dir,files in os.walk("/tmp/tartest"):print rootprint dirprint filesfor 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 ospath = ‘/test/test1/test2/‘print pathprint 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 shutilshutil.copy(‘a.txt‘, ‘b.txt‘)
1、open默认以读模式打开,并且我们打开的,一定是个存在的文件,否则会报错。而这个文件,可以是相对路径,也可以是绝对路径2、但是我们以写模式打开的时候,如果这个文件不存在,则创建,这里面不会报错3、文件指针的问题4、readline和readliens是不用加参数的,不是我们期望的读取几行的结果5、read函数参数的问题:负数和没有参数是一样的效果6、close不是必须的,但是我们操作完一个文件的时候尽量去close它7、可以用+模式解决既可以读,又可以写的问题8、read模式可以用readline和readliens读一行和读多行,但是write模式只写一行,用writelines9、在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() 获取一个环境变量,如果没有返回noneos.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) 改变工作目录到dirnameos.path.getsize(name) 获得文件大小,如果name是目录返回0Los.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 ) 递归删除一个目录以及目录内的所有内容