
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)