python文件处理:file对象,tempfile,shuitl,os.path,os

File descriptor(文件描述符)

fd文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。

一,File对象
python的文件对象File类是实现C的stdio包,并且可以通过内建方法open()来创建(同样可以使用内建方法file()来创建)。当文件操作引发错误时会抛出IOError。
 
1 类的方法
      1.1 close():关闭文件流操作。当文件被关闭后就不能对其进行读写操作,如果依然进行的话会引发ValueError。close()可多次调用。
      1.2 fulsh():冲刷内部缓存区。并不是一个必须的操作。
      1.3 fileno():以数字形式返回“文件描述符”( file descriptor )。
      1.4 isatty(): 文件是否是一个终端设备文件。
      1.5 next():返回下一行内容,并把操作标记置于下行开头。如 for line in file: print line 就是调用了next()方法。
      1.6 read([size]):无参数或size是负数时,从文件中读取所有数据直到EOF,size为正数 时从文件中读取size个byte。
      1.7 readline([size]):无参数时,读取一行。 size为正数 时从文件中读取size个byte。
      1.8 readlines([sizehint]):把文件中的每一行最为一个列表的元素,返回这个列表。
      1.9 seek(offset[, whence]): 将文件的操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0(os.SEEK_SET)表示从头开始计算(默认为0),1(os.SEEK_CUR)表示以当前位置为原点计算。2(os.SEEK_END)表示以文件末尾为原点进行计算。
      1.10 tell():返回相对于开头记为0的文件当前的位置。
      1.11 truncate([size]):裁剪文件的大小,如果size比文件本身还大,那根据不同的文件系统而定。size是byte。
      1.12 write(str):写入文件内容。
      1.13 writelines(sequence):写入文件内容,sequence是所有包含string信息的sequence。
 
2 类的属性
       2.1 closed:标记文件是否已经关闭,由close()改写此标记
      2.2  encoding:文件编码
      2.3 error:随着encoding使用的编码错误处理
      2.4  mode:打开模式
      2.5 name:文件名
      2.6 newlines:文件中用到的换行模式
 
文件的mode含义:
主要三种mode:r(只读),w(只覆盖写),a(只追加写)。这三种mode之间不能结合使用,而b和+需要配合前三种mode使用,不能独立使用。
添加‘b’到mode参数中,将对文件以二进制形式操作。添加‘+’到mode参数中,将允许对文件同时进行读写操作。
mode值
mode含义
r
以只读方式打开文件,写文件和文件不存在时会抛出IOError。
w
以只写方式打开文件,读文件时会抛出IOError。
文件不存在会创建文件,文件存在时写入会把原有内容覆盖。
a
以追加写方式打开文件,读文件时会抛出IOError。
文件不存在会创建文件,文件存在时写入追加到文件末尾。
r+
以读写方式打开文件,文件不存在会抛出IOError。
文件存在时写入会把原有内容覆盖。
w+
以读写方式打开文件,可以读取文件信息。
文件不存在会创建文件,文件存在时写入会把原有内容覆盖。
a+
以追加读写方式打开文件,可以读取文件信息。
文件不存在会创建文件, 文件存在时写入追加到文件末尾 。
rb/rb+
与r/r+类似,只是文件以二进制形式打开。
wb/wb+
与w/w+类似,只是文件以二进制形式打开。
ab/ab+
与a/a+类似,只是文件以二进制形式打开。
 
二,tempfile
用于创建临时文件和目录。其他程序无法找到和打开这个临时文件,关闭后会自动删除。
 
模块的函数:
      1 TemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None]]]]]) :返回一个类似于file的对象。当这个返回的对象调用close()方法后这个临时文件就会消失。mode默认是可读写二进制打开,如果要换成文本类型打开可以使用w+t
tmepf = tempfile.TemporaryFile()
tmepf.writelines(('ni\n', 'hao\n'))
tmepf.seek(0)
print tmepf.readline()
print tmepf.name
      2 NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]]):与 TemporaryFile()函数一样,只是可函数返回的类file对象可以通过其名字被其他程序访问
      3  SpooledTemporaryFile ([ max_size=0 [,  mode='w+b' [,  bufsize=-1 [,  suffix='' [,  prefix='tmp' [,  dir=None ]]]]]]): TemporaryFile()函数一样,只是这个临时文件内容保存在内存中直到其大小超过max_size。
      4   mkstemp ([ suffix='' [,  prefix='tmp' [,  dir=None [,  text=False ]]]]):创建一个临时文件,返回一个二元元组,第一个元素是操作临时文件的安全级别(os-level handle),第二个元素是临时文件的全路径。 参数suffix和prefix分别表示临时文件名称的后缀和前缀;dir指定了临时文件所在的目录,如果没有指定目录,将根据系统环境变量 TMPDIR TEMP 或者 TMP 的设置来保存临时文件;参数text指定了是否以文本的形式来操作文件,默认为False,表示以二进制的形式来操作文件。 TemporaryFile不同,需要用户自己删除这个临时文件。
fd, filename = tempfile.mkstemp()
print fd, filename
os.close(fd)
os.remove(filename)
      5  mkdtemp([suffix=''[, prefix='tmp'[, dir=None]]]):创建临时目录,也需要用户自己删除这个临时目录
      6  gettempdir():返回存放临时文件的目录。
模块属性:
      1  tempdir:返回存放临时文件的目录。 如果没有设置该属性或者将其设为None,Python将返回以下环境变量TMPDIR, TEMP, TEMP指定的目录,如果没有定义这些环境变量,临时文件将被创建在当前工作目录。
 
三,shutil
此模块提供文件集的一些高级操作。
 
1 目录和文件操作
      1.1   copyfileobj ( fsrc fdst [,  length ]):将目标类文件对象fsrc拷贝到目的类文件对象fdst。当给定length时则表示指定buffer的size。fsrc必须具有读模式,fdst必须具有写模式或追缴模式。
      1.2 copyfile(src, dst):把目标文件源src拷贝到目标文件源dst,如果dst已经存在就覆盖。如果src和dst是同一文件会抛出异常,dst必须有写权限。
      1.3 copymode(src, dst):把权限位从src拷贝到det。
      1.4 copystat(src, dst):拷贝权限位,最后访问时间和修改时间。
      1.5 copy(src, dst):把文件src拷贝到文件dst或者目录dst中。权限位会被拷贝。如果dst为目录则把文件拷贝到dst目录中,如果存在src同名文件就覆盖之。
      1.6 copy2(src, dst):类似于 cp -p命令。是copy +  copystat,在拷贝文件内容的同时拷贝最后访问时间和修改时间。
      1.7 copytree(src, dst, symlinks=False, ignore=None):把src递归拷贝到dst,如果symlinks是True,则复制目录时将保持文件夹下的符号连接,如果symlinks是False,则将在复制的目录下生成物理副本来替代符号连接。src和dst必须为目录,且dst必须不存在。
      1.8 rmtree(path[, ignore_errors[, onerror]]):删除整个目录树。
      1.9 move(src, dst):递归移动一个文件或者一个目录(src)到目标文件或目录dst,类似于剪切。dst如为文件当src文件和dst文件同名时覆盖dst文件;dst如为目录必须不存在。
 
2 归档操作
      2.1 make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]]):创建一个归档文件(如zip和tar),并返回其名字。
base_name是生产的归档文件的全路径及名字,format是归档格式,如zip,tar,bztar,gztar;root_dir是归档文件的跟目录;base_dir是归档文件的来源,root_dir和base_dir的默认目录都是当前目录。
      2.2  get_archive_formats ():返回一个系统所支持的归档类型的列表,其中元素为简称和说明的元组。
      2.3  register_archive_format ( name function [,  extra_args [,  description ]]):注册一个新的归档类型。
      2.4  unregister_archive_format ( name ):注销一个归档类型。
 
四,os.path
此模块实现了对路径名称很有用的函数。
 
模块的函数
      1. abspath(path):返回path的绝对路径。
import os.path as op
print op.abspath(r"./")
      2. basename(paht):返回path的文件名。
      3. dirname(path):返回path的目录名。
      4. exists(path):判断某个目录或文件是否存在,True为存在。
      5. lexists(path): 如果 path 与一个已存在的路径关联返回 True 。对于损坏的连接返回 True 。在一些缺少 os.lstat()的平台上相当于exists()。
      6. expanduser(path):把~和~user的path换成用户的home目录。
      7. expandvars(path):环境变量值替换path内的变量,linux中以$name和${name}表示,Windows中是以%name%表示。
      8. getatime(path):返回最后一次进入该path的时间戳。
      9. getmtime(path):返回最后一次在该path下修改的时间戳。
      10. getctime(path):返回该path对应的文件或目录的创建时间戳。(Unix上是最后一次修改时间)。
      11. getsize(path):文件大小,目录大小是固定的,单位字节。
      12. isabs(path):是否是绝对路径。
      13. isfile(path):是否为文件。
      14. isdir(path):是否为目录。
      15. islink(paht):是否为连接。
      16. ismount(path):是否为挂载点。
      17.  join ( path1 [,  path2 [,  ... ]]):合成路径,形成新目录或文件。
      18. normcase(path):转换目录内的大小写,斜杠等特殊符号。
      19. normpath(path):规范的path字符串形式。
      20. realpath(path):如果是相对路径,则返回当前目录下的绝对路径(os.curdir)。
      21. samefile(path1, path2):判断两个目录或文件是否是同一个,适用于Unix。
      22. split(path):返回包含目录和文件名的元组。
      23. splitdrive(path):用于Windows下,将驱动器(如C盘,C:)与之后的路径分开。
      24. splitext(path):分割路径,返回文件名和扩展文件名的元组。
      25. splitunc(path):分割加载点和文件。
      26. walk(path, visit, arg):遍历path,进入每个目录都调用visit函数,visit函数必须有3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有文件名,args则为walk的第三个参数。
 
五,在os模块中的部分文件操作
File descriptor的相关操作(fd)
      1.1 close(fd):关闭fd对应的文件对象。
      1.2 dup(fd):返回一个fd的副本。
      1.3 fsync(fd):将fd所指向的文件对象刷新如硬盘。
      1.4 open(file, flag[, mode]):打开一个文件对象并返回fd。
flag含义(Windows和Unix都能用的,其他的并未给出,请参考python的具体文档):
os.O_RDONLY
以只读的方式打开 Read only
os.O_WRONLY
以只写的方式打开 Write only
os.O_RDWR
以读写的方式打开 Read and write
os.O_APPEND
以追加的方式打开 
os.O_CREAT
创建并打开一个新文件
os.O_EXCL
os.O_CREAT| os.O_EXCL 如果指定的文件存在,返回错误
os.O_TRUNC
打开一个文件并截断它的长度为零(必须有写权限)
      1.5 read(fd, n):读取fd所对应的文件,n为读取的最多字节数。
      1.6 write(fd, str):对fd所对应的文件对象进行写入,内容为str。
      1.7  lseek ( fd pos how ): 将fd所对应的文件的操作标记移到pos的位置。这个pos一般是相对于文件的开头来计算的,一般为正数。但如果提供了 how 参数就不一定了, how 可以为0( os.SEEK_SET )表示从头开始计算(默认为0),1( os.SEEK_CUR )表示以当前位置为原点计算。2( os.SEEK_END )表示以文件末尾为原点进行计算。
      1.8  fdopen ( fd [,  mode [,  bufsize ]]):返回一个fd对应的文件对象。和内建函数open类似。
 
2 另外一些文件操作
      2.1 sep:当前操作系统的路径分割符。
      2.2 name:当前的操作系统。
      2.3 linesep:当前操作系统的行换行符。
      2.4 listdir(path):返回指定path下的所有文件和目录名称列表。
      2.5 getcwd():返回当前的目录字符串。
      2.6 remove(path):删除一个文件,如果是目录就会抛出OSError。
      2.7 removedirs(path):只能删除目录,会试图删除path目录上的每个节点(每个空目录),知道有OSError为止。
      2.7 rmdir(path):只能删除空目录,删除非空文件shuitl. rmtree。
      2.8 rename(src, dst):把文件或目录重命名。
      2.9 stat(path):获得文件或目录的属性。
      2.10   mkdir ( path [,  mode ]):创建一个名为path的目录,mode为Unix系统中文件的数字化权限,默认值为0777。
      2.11 makedirs(path[, mode]):递归创建多层目录。
      

你可能感兴趣的:(python)