一.文件的操作
1.打开文件
file_object=open(filename,mode='r',buffering=-1)
open返回一个文件对象,文件对象可迭代
mode为可选参数,默认值为‘r’
buffering为可选参数,默认值为-1,表示使用默认缓冲,0表示不使用缓冲,1或大于1的值表示缓冲一行或指定缓冲区大小
open()函数--mode
mode | 功能 |
r | 只读方式打开文件 |
w | 以写方式打开文件并清空原文件内容,没有就创建文件写 |
x | 以写方式打开文件,如果文件存在则报错 |
a | 以追加方式打开文件 |
r+ | 可读,可写,通过seek定位指针位置,想在那写就在那里写(写的内容是向后覆盖) |
w+ | 先清空原内容,再可写, 可读 |
a+ | 可读,可写(不管指针位置在那里,永远追加到文件尾) |
x+ | 文件存在就报错,不存在就创建可读,可写 |
rb 或 r+b |
|
wb或w+b | 以二进制写或二进制读写打开文件(参见w或w+) |
xb或x+b | 以二进制写或二进制读写打开文件(参见x或x+) |
ab或 a+b | 以二进制追加或二进制读写追加打开文件(参见a或a+) |
2.操作文件
read() #无参数,读全部内容,有参数,无b按字符读;有b按字节读
tell() 获取当前指针位置(字节)
seek() 指针跳转到指定位置(字节)
write() 写数据,无b写字符,有b写字节
close() 关闭文件(关闭前会刷新缓存区的内容到磁盘)
fileno() 文件描述符
flush() 刷新到硬盘
readable() 判断是否可读
readline() 仅读取一行
truncate() 截断数据,只保留指针前面的内容,指针后面的内容清空
for 循环文件对象,eg
f=open('dd',r)
for line in f:
print(line)
3.关闭文件
文件关闭调用close()方法或者使用with管理上下文, with打开文件操作完后会自动关闭文件(可以同时打开多个文件)
#把db1文件里前10行,写入db2文件里
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
二.内置函数的补充
ASCII码的转换:
chr() 把数字转换成ascii码里的字母,chr(65)结果为大A
ord() 把字母转换成ascii码里的数字,ord(‘a’)结果为97
bytes() 把字符串转换为python的字节码,eg,bytes('解释',encoding='utf-8')运行结果为:b'\xe8\xa7\xa3\xe9\x87\x8a'
str() 把python字节码转换成字符串,eg str(bytes('解释',encoding='utf-8'),encoding='utf-8'),运行结果为: 解释
compile() 把字符串或python文件编译成python的字节码
exec() 执行编译后的python字节码,可以接收字符串编译执行,也可以执行字符串表达式,不返回结果
eval() 执行字符串表达式,并返回执行结果
s = 'print(123)'
com=compile(s,'<string>','exec')
print(com) #运行结果:<code object <module> at 0x00622660, file "<string>", line 1>
exec(com) #运行结果为:123
print(eval(('8-2+88')) 运行结果为94
print(exec('9-8+9') 返回结果为None