python的文件操作方法
python中的文件对象:
文件对象不仅可以用来访问普通的磁盘文件, 而且也可以访问任何其它类型抽象层面上的"文
件". 一旦设置了合适的"钩子", 你就可以访问具有文件类型接口的其它对象, 就好像访问的是普
通文件一样.
文件内建函数[open()和 file()]
- open('filename')
- with open('filename') as f:
- pass
open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象。模式和缓冲参数都是可选的,默认为只读模式打开文件。使用with即使发生错误可以关闭文件,
下面列出文件对象的访问的模式:
- 文件模式 操作
- r 以只读方式打开
- rU 或 Ua 以读方式打开, 同时提供通用换行符支持 (PEP 278)
- w 以写方式打开 (必要时清空)
- a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
- r+ 以读写模式打开
- w+ 以读写模式打开 (参见 w )
- a+ 以读写模式打开 (参见 a )
- rb 以二进制读模式打开
- wb 以二进制写模式打开 (参见 w )
- ab 以二进制追加模式打开 (参见 a )
- rb+ 以二进制读写模式打开 (参见 r+ )
- wb+ 以二进制读写模式打开 (参见 w+ )
- ab+ 以二进制读写模式打开 (参见 a+ )
- x 如果文件存在报错,不存在则创建
- ***加b模式打开,不可以在指定encoding,切写入时也需要转换为字节写入文件
- 下面是一些打开文件的例子:
- f = open('/etc/motd') # 以读方式打开
- f = open('test', 'w') # 以写方式打开
- f = open('data', 'r+') # 以读写方式打开
- f = open('io.sys', 'rb') # 以二进制读模式打开
- bytes 字符串转换字节类型
- n=bytes(李杰,encoding='utf-8')[转换的字符,可以是变量,转换后的编码]
- 字节转换为字符串
- str(bytes(李杰,encoding='utf-8'),encoding='utf-8)
- 文件操作
open() 和 file() 函数具有相同的功能, 可以任意替换.任何使用 open() 的地方, 都可以使用 file() 替换它.建议使用 open() 来读写文件, 在处理文件对象时使用 file() 。open() 成功执行并返回一个文件对象之后, 所有对该文件的后续操作都将通过这个"句柄"进行.
文件方法可以分为四类: 输入, 输出, 文件内移动, 以及杂项操作.
输入
read() 方法用来直接读取字节到字符串中, 最多读取给定数目个字节. 如果没有给定 size
参数(默认值为 -1)或者 size 值为负, 文件将被读取直至末尾.
指定读取size:
readline() 方法读取打开文件的一行(读取下个行结束符之前的所有字节). 然后整行,包括行
结束符,作为字符串返回. 和 read() 相同, 它也有一个可选的 size 参数, 默认为 -1, 代表读至
行结束符. 如果提供了该参数, 那么在超过 size 个字节后会返回不完整的行.
readlines() 方法并不像其它两个输入方法一样返回一个字符串. 它会读取所有(剩余的)行然
后把它们作为一个字符串列表返回. 它的可选参数 sizhint 代表返回的最大字节大小. 如果它大
于 0 , 那么返回的所有行应该大约有 sizhint 字节(可能稍微大于这个数字, 因为需要凑齐缓冲区
大小).
输出
write() 内建方法功能与 read() 和 readline() 相反. 它把含有文本数据或二进制数据块的
字符串写入到文件中去.
文件内移动
seek() 方法(类似 C 中的 fseek() 函数)可以在文件中移动文件指针到不同的位置. offset
字节代表相对于某个位置偏移量. 位置的默认值为 0 , 代表从文件开头算起(即绝对偏移量), 1 代
表从当前位置算起, 2 代表从文件末尾算起. 如果你是一个 C 程序员,并且使用过了 fseek() , 那
么,0, 1, 2 分别对应着常量 SEEK_SET, SEEK_CUR, 以及 SEEK_END. 当人们打开文件进行读写操
作的时候就会接触到 seek()方法。
#跳过前五个字符,读取之后的内容
truncate() 方法, 它接受一个可选的 size 作为参数. 如果给定, 那么文
件将被截取到最多 size 字节处. 如果没有传递 size 参数, 那么默认将截取到文件的当前位置.
例如, 你刚打开了一个文件, 然后立即调用 truncate() 方法, 那么你的文件(内容)实际上被删除,
这时候你是其实是从 0 字节开始截取的( tell() 将会返回这个数值 )
其他:
close()
关闭文件来结束对它的访问. Python 垃圾收集机制也会在文件对象的引用计数降
至零的时候自动关闭文件. 这在文件只有一个引用时发生, 例如 f = open(...), 然后 f 在原文
件显式地关闭前被赋了另一个文件对象. 良好的编程习惯要求在重新赋另个文件对象前关闭这个文
件. 如果你不显式地关闭文件, 那么你可能丢失输出缓冲区的数据.
fileno() 方法返回打开文件的描述符. 这是一个整数, 可以用在如 os 模块( os.read() )的
一些底层操作上
flush() 方法会直接把内部缓冲区中的数据立刻写入文件, 而不是被动地等待输出缓冲
区被写入. isatty() 是一个布尔内建函数, 当文件是一个类 tty 设备时返回 True , 否则返回
False . truncate() 方法将文件截取到当前文件指针位置或者到给定 size , 以字节为单位.
文件对象的内建方法列表
- 文件对象的方法 操作
- file.close() 关闭文件
- file.fileno() 返回文件的描述符(file descriptor ,FD, 整数值)
- file.flush() 刷新文件的内部缓冲区
- file.isatty() 判断 file 是否是一个类 tty 设备
- file.nexta() 返回文件的下一行(类似于 file.readline() ), 或在没有其它行时
- 引发 StopIteration 异常
- file.read(size=-1) 从文件读取 size 个字节, 当未给定 size 或给定负值的时候, 读
- 取剩余的所有字节, 然后作为字符串返回.如果打开模式无b,则read按字符读取,否则按字节读取
- file.readline(size=-1) 从文件中读取并返回一行(包括行结束符), 或返回最大 size
- file=open('test','ab')
- file.write(bytes('hehe',encoding='utf-8')) 向文件写入字符串 (会覆盖原有数据,坑
- file.close() 关闭文件
- file.tell获取当前指针的位置
- file.read()如果打开模式无b,则read按字符读取,否则按字节读取
- file.fileno文件描述符
- file.truncat 截断数据,清除文件指针之后的数据
- file.seek(off, whence=0) 在文件中移动文件指针, 从 whence ( 0 代表文件其始, 1代表当前位置, 2 代表文件末尾)偏移 off 字节,不论是否有中文,都以字节为单位
- file.truncate(size=file.tell()) 截取文件到最大 size 字节, 默认为当前文件位置
- file.writelines(seq) 向文件写入字符串序列 seq ; seq 应该是一个返回字符串的
- 可迭代对象
- file.readlines(sizhint=0) 读取文件的所有行并作为一个列表返回(包含所有的行结束
- 符);
对文件系统的访问
对文件系统的访问大多通过 Python 的 os 模块实现. 该模块是 Python 访问操作系统功能的主
要接口.
os 模块的文件/目录访问函数
文件处理
- mkfifo()/mknod()a 创建命名管道/创建文件系统节点
- remove()/unlink() Delete file 删除文件
- rename()/renames()b 重命名文件
- *statc() 返回文件信息
- symlink() 创建符号链接
- utime() 更新时间戳
- tmpfile() 创建并打开('w+b')一个新的临时文件
- walk()a 生成一个目录树下的所有文件名
目录/文件夹
- chdir()/fchdir()a 改变当前工作目录/通过一个文件描述符改变当前工作目录
- chroot()d 改变当前进程的根目录
- listdir() 列出指定目录的文件
- getcwd()/getcwdu()a返回当前工作目录/功能相同, 但返回一个 Unicode 对象
- mkdir()/makedirs() 创建目录/创建多层目录
- rmdir()/removedirs() 删除目录/删除多层目录
访问/权限
- access() 检验权限模式
- chmod() 改变权限模式
- chown()/lchown()a 改变 owner 和 group ID/功能相同, 但不会跟踪链接
- umask() 设置默认权限模式
文件描述符操作
- open() 底层的操作系统 open (对于文件, 使用标准的内建 open() 函数)
- read()/write() 根据文件描述符读取/写入数据
- dup()/dup2() 复制文件描述符号/功能相同, 但是是复制到另一个文件描述符
设备号
- makedev()a 从 major 和 minor 设备号创建一个原始设备号
- major()a /minor()a 从原始设备号获得 major/minor 设备号
os.path 可以完成一些针对路径名的操作. 它提供的函数可以完成管理和操作文
件路径名中的各个部分, 获取文件或子目录信息, 文件路径查询等操作
os.path 模块中的路径名访问函数
分隔
- basename() 去掉目录路径, 返回文件名
- dirname() 去掉文件名, 返回目录路径
- join() 将分离的各部分组合成一个路径名
- split() 返回 (dirname(), basename()) 元组
- splitdrive() 返回 (drivename, pathname) 元组
- splitext() 返回 (filename, extension) 元组
信息
- getatime() 返回最近访问时间
- getctime() 返回文件创建时间
- getmtime() 返回最近文件修改时间
- getsize() 返回文件大小(以字节为单位)
查询
- exists() 指定路径(文件或目录)是否存在
- isabs() 指定路径是否为绝对路径
- isdir() 指定路径是否存在且为一个目录
- isfile() 指定路径是否存在且为一个文件
- islink() 指定路径是否存在且为一个符号链接
- ismount() 指定路径是否存在且为一个挂载点
- samefile() 两个路径名是否指向同个文件
还有大量的其它模块与文件和输入/输出有关, 它们中的大多数都可以在主流平台上工作.
- base64 提供二进制字符串和文本字符串间的编码/解码操作
- binascii 提供二进制和 ASCII 编码的二进制字符串间的编码/解码操作
- bz2a 访问 BZ2 格式的压缩文件
- csv 访问 csv 文件(逗号分隔文件)
- filecmpb 用于比较目录和文件
- fileinput 提供多个文本文件的行迭代器
- getopt/optparsea 提供了命令行参数的解析/处理
- glob/fnmatch 提供 Unix 样式的通配符匹配的功能
- gzip/zlib 读写 GNU zip( gzip) 文件(压缩需要 zlib 模块)
- shutil 提供高级文件访问功能
- c/StringIO 对字符串对象提供类文件接口
- tarfilea 读写 TAR 归档文件, 支持压缩文件
- tempfile 创建一个临时文件(名)
- uu 格式的编码和解码
- zipfilec 用于读取 ZIP 归档文件的工具
下面列举几个简单的示例:
对文件进行迭代而不使用变量存储文件对象
- for line in open(finename):
- print(line)
同时打开两个文件
- with open('user.txt') as f,open('user1.txt') as f2:
- pass
获取文件前十行
- with open('db1', 'r', encoding="utf-8") as f1, open("db2", 'w',encoding="utf-8") as f2:
- times = 0
- for line in f1:
- times += 1
- if times <=10:
- f2.write(line)
- else:
- break
替换文件内指定的字符串
- with open('db1', 'r', encoding="utf-8") as f1, open("db2", 'w',encoding="utf-8") as f2:
- for line in f1:
- new_str = line.replace("alex", 'st')
- f2.write(new_str)
python的文件操作方法的更多相关文章
- python对文件的操作
一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件 ...
- Python之文件读写
本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input ...
- python IO文件处理
python的文件读写操作符有:r w a r+ w+ rb wb 除了以file的方式打开文件,还有一种方式就是open了,两个的用法是一模一样的,可以看成open就是file的别名 下面这个表格是 ...
- python之文件的读写和文件目录以及文件夹的操作实现代码
这篇文章主要介绍了python之文件的读写和文件目录以及文件夹的操作实现代码,需要的朋友可以参考下 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用 ...
- 文件操作mode学习总结-----Python学习总结【第四篇】:Python之文件操作(文件、正则、json、pickle)
非常全的博客,防丢链接参考https://www.cnblogs.com/madsnotes/articles/5521551.html 1.文件操作 1.1 操作流程 1)文件打开 2)文件操作 3 ...
- 【转】Python之文件读写
[转]Python之文件读写 本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 ...
- Python基础--文件操作和集合
这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件file.txt: 我们哭了 ...
- python初学--文件操作、字典
文件读写 1.先打开文件 2.读取/写入内容 3.保存文件 文件的open模式有三种 1.w 写模式,它是不能读的 只要用w打开文件,文件中的东西都会被清空 w+, 写读模式,只要沾上w 就会清空 ...
- (转)Python之文件读写
Python之文件读写 原文:https://www.cnblogs.com/huilixieqi/p/6494891.html 本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 ...
随机推荐
- 【转】图片IMG标记的alt属性和title属性的使用
alt text 替 换文字(alt text)是为了给那些不能看到你文档中图像的浏览者提供文字说明.这包括那些使用本来就不支持图像显示或者图像显示被关闭的浏览器的用户,视觉障碍的用户和使用屏幕阅读器 ...
- ubuntu下安装jdk(rpm版)错误: 找不到或无法加载主类 解决方法
1.官网下载jdk,linux64位,rpm格式的. 2.提取下载的文件,提取到一个目录下,我的是提取到了usr目录下了 3.终端输入:sudo gedit ~/.bashrc 会打开一个文本,在文本 ...
- POJ 4047 Garden 线段树 区间更新
给出一个n个元素的序列,序列有正数也有负数 支持3个操作: p x y 0.p=0时,把第x个的值改为y 1.p=1时,交换第x个和第y个的值 2.p=2时,问区间[x,y]里面连续k个的子序列的最大 ...
- 转-封装网络请求库,统一处理通用异常 (基于volley网络请求库)
http://blog.csdn.net/kroclin/article/details/40540761 一.前言 volley的发布让网络请求也变得十分便利,但是我们通常懒得很想用一两句代码实现一 ...
- C#使用EmguCV实现视频读取和播放,及多个视频一起播放的问题
大家知道WPF中多线程访问UI控件时会提示UI线程的数据不能直接被其他线程访问或者修改,该怎样来做呢? 分下面两种情况 1.WinForm程序 1)第一种方法,使用委托: private delega ...
- iPhone开发之UIScrollView初步
来源:http://blog.csdn.net/htttw/article/details/7891396 iPhone开发之UIScrollView初步 今天我们初步介绍以一下iPhone开发中的U ...
- .NET 文件相关的所有操作
public static class FileSystemHelper { #region 检测指定目录是否存在 /// <summary> /// 检测指定目录是否存在 /// < ...
- .NET 添加/删除Cookie
public class CookieHelper { /// <summary> /// 清除指定Cookie /// </summary> /// <param na ...
- JAVA错误:Cannot refer to a non-final variable * inside an inner class defined in a different method
在使用Java局部内部类或者内部类时,若该类调用了所在方法的局部变量,则该局部变量必须使用final关键字来修饰,否则将会出现编译错误“Cannot refer to a non-final vari ...
- 破解ckfinder2.3 去除版本号和标题提示
1.找到ckfinder.js 2.找到这样的字符串 <h4 class='message_content'></h4> 3.改成这样 <h4 style='displa ...