设为首页 收藏本站
查看: 1049|回复: 0

[经验分享] python文件处理:file对象,tempfile,shuitl,os.path,os

[复制链接]

尚未签到

发表于 2017-5-6 13:27:17 | 显示全部楼层 |阅读模式
  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指定了临时文件所在的目录,如果没有指定目录,将根据系统环境变量TMPDIRTEMP或者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(fsrcfdst[, 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(namefunction[, 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(fdposhow):将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]):递归创建多层目录。
      

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-373868-1-1.html 上篇帖子: (二)selenium+python选择编译器写第一个自动化脚本 下篇帖子: Python实战开发之Pyramid Web框架在商城项目中的应用教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表