`
您已经登录
  • 浏览: 43060 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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指定了临时文件所在的目录,如果没有指定目录,将根据系统环境变量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]):递归创建多层目录。
      
分享到:
评论

相关推荐

    python对指定目录下文件进行批量重命名的方法

    本文实例讲述了python对指定目录下文件进行批量重命名的方法。... if os.path.isfile(os.path.join(path,file))==True: newname = file.replace("scroll_1", "scroll_00") os.rename(os.path.join(path,f

    os 组件学习笔记1

    举例:save_file_name = os.path.join('temp','temp_spam_data.csv') 返回:字符串temp\temp_sp

    Python库 | cdktf-cdktf-provider-external-0.1.228.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:cdktf-cdktf-provider-external-0.1.228.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    python读取多层嵌套文件夹中的文件实例

    想到了递归函数,使用python的os.path.isfile方法判断当前是不是可执行文件,如果不是再用os.listdir方法将子目录循环判断。 代码如下 import os path = 'abc' path_read = [] #path_read saves all executable ...

    使用python编写脚本获取手机当前应用apk的信息

    前提是已设置ANDROID_HOME环境变量,使用aapt工具获取apk的信息,保存至脚本所在目录下的...rootDir = os.path.join(os.environ["ANDROID_HOME"], "build-tools") for path, subdir, files in os.walk(rootDir

    Python程序设计之文件操作(2)

    import tempfile #创建临时文件和文件夹 #os.access('1.txt','r+') print(os.path.exists('test.txt'),end='\\n') #查看文件是否存在 print(os.path.dirname('D:\\1.txt'),end='\\n') #查看文件父目录 print(os.path...

    python3.6.5参考手册 chm

    tempfile textwrap threading time types unittest urllib webbrowser xml.etree.ElementTree zlib Optimizations Build and C API Changes Deprecated Unsupported Operating Systems Deprecated ...

    基于python修改srt字幕的时间轴

    这篇文章主要介绍了基于python修改srt字幕的时间轴,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考...srt_file_path = os.path.join(temp, "15.srt") def read_srt_

    Python3入门指南_v2.4.pdf

    9.8 tempfile模块: 生成临时文件和临时目录 146 十、面向对象编程 147 10.1 面向对象程序设计思想 147 10.2 面向对象相关术语 148 10.3 类与对象的基本使用 148 10.4 类封装机制 156 10.5 类继承机制 157 10.6 父类...

    python模块详解

    2.4. tempfile 模块 2.5. StringIO 模块 2.6. cStringIO 模块 2.7. mmap 模块 2.8. UserDict 模块 2.9. UserList 模块 2.10. UserString 模块 2.11. traceback 模块 2.12. errno 模块 2.13. getopt 模块 ...

    python标准库OS模块详解

    python标准库OS模块简介 os就是“operating system”的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统...要创建临时文件或路径,建议使用tempfile模块; 要进行更高级的文件和路径操作则应当使用shuti

    艾伯特《Python标准库》中文版

    tempfile 模块 o 2.5. StringIO 模块 o 2.6. cStringIO 模块 o 2.7. mmap 模块 o 2.8. UserDict 模块 o 2.9. UserList 模块 o 2.10. UserString 模块 www.aibbt.com 让未来触手可及o 2.11. traceback 模块 o 2.12. ...

    idapkg:IDA Pro 软件包(用 python 编写但支持所有)

    import zipfile,tempfile,sys,os,threading,shutil,importlib def install():P=os.path;tag='v0.1.4';n=tempfile.NamedTemporaryFile(delete=False,suffix='.zip');n.close();print('Started downloading ...

    python标准库OS模块函数列表与实例全解

    Python OS模块库详解 os就是“operating system”的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行...要创建临时文件或路径,建议使用tempfile模块; 要进行更高级的文件和路径操作则应当使用shutil

    python常用模块

    这个模块提供了一个轻便的方法使用要依赖操作系统的功能。 如何你只是想读或写文件,请使用open() ,如果你想操作文件路径,请...使用tempfile模块创建临时文件和文件夹,更高级的文件和文件夹处理,请使用shutil模块。

    磁盘垃圾文件清理器python代码实现

    本文假设某些特定类型的文件和大小为0的文件为垃圾文件,可以自由扩展代码的列表,也就是垃圾文件的类型。 from os.path import isdir, join, splitext from os import remove, listdir, chmod, stat import sys #...

    aiopath:for Python的异步pathlib

    :file_folder: 适用于Python的异步pathlib aiopath是来自Python 3.4+的的完整实现,与和兼容。 所有执行的I / O是异步的和可。 aiopath使用Python广泛地... import tempfile from pathlib import Path from aiopath i

    对Python 检查文件名是否规范的实例详解

    import tempfile import subprocess # rootPath = os.getcwd() # print rootPath rootPath = raw_input('The Check Path:') nonCheckDir = raw_input('The Non Check DirName(DirName1;DirName2):') nonCheckD

    Python批量获取并保存手机号归属地和运营商的示例

    从Excel读取一组手机号码,批量查询该手机号码的运营商和归属地,并将其追加到该记录的末尾。 ...new_file_path = "F:\\temp(含归属地+运营商).xlsx" def query(phone_no): resp = requests.get(h

    python批量检查两个对应的txt文件的行数是否一致的实例代码

    在做深度学习的目标检测中,我们在测试好数据集后,可以用批量检查两个数据文件下面的标签文件,看看他们的行数是否一致,这样可以判断是否有漏检的情况,就不用一张张图片去看了。 对比两个标签文件的行数,可以...

Global site tag (gtag.js) - Google Analytics