1.打开文件
打开文件的三步:打开 --> 操作 --> 关闭
f = open(’/tmp/passwdd’,‘w’) ##打开文件
content = f.read() ##操作
f.close() ##关闭文件
#打开文件
f = open('/tmp/passwdd','w')
#读操作
# content = f.read()
# print(content)
# print(f.writable())
# print(f.readable())
#写操作
f.write('hello')
#关闭
f.close()
2.文件的读写(文本文件)
操作符 | 功能 |
---|---|
r:默认 | 只能读不能写读取的文件不存在会报错 |
r+ | 可以执行读写操作,文件不存在会报错,默认情况下从文件指针所在位置开始写入 |
w:write only | 会清空文件之前的内容,文件不存在不会报错,会创建新的文件并写入 |
w+ | 可读可写,会清空源文件内容,文件不存在时不会报错,会建立文件并写入 |
a:write only | 不会清空文件内容,文件不存在会建立文件 |
a+ | 可读可写,不会清空原来的内容,在原文件末尾追加,文件不存在会自动建立并写入 |
例:
f = open('/mnt/passwd','r+')
print(f.tell()) ###查看当前指针所在的位置
f.write('python') ##写入
print(f.tell()) ###查看当前指针所在的位置
content = f.read()
print(content) ##读操作
f.close()
运行:你可能会遇到下面的报错——这是因为文件的权限不够
实验:
<1>r:可读不可写
<2>r+:可读可写
<3>w:可写,会清空文件之前的内容,文件不存在不会报错,会创建新的文件并写入
当我们使用w时,文件不存在,竟然报错了,不是说文件不存在时会自行建立并写入吗?仔细查看报错我们发现,它告诉我们权限不够,好的,文件不存在那么权限也无从谈起,我们试试更改/mnt的权限
3.文件指针与读取操作
为了方便理解,我们先准备下面的文件/mnt/test(权限加满):
文件指针
seek方法,移动指针
seek的第一个参数是偏移量:>0,表示向右移动,<0表示向左移动
seek的第二个参数是:
0:移动指针到文件开头
1:不移动指针
2:移动指针到末尾
文件读取操作
- f = open(’/mnt/test’,‘rb’)
- read() ------>读取文件内容,并将内容一行输出
- readilne()------>读取文件内容,写入几行readilne(),输出几行
- readlines()------>读取文件内容,返回一个列表,列表的元素分别是文件内行的内容
(1)readlines():读取文件内容,返回一个列表,列表的元素分别为文件
行内容
(2)默认情况下读取文件的所有内容,小文件可以直接用read读取,如果
是大文件(文件大小>内存大小),不能通过read一次性读取所有内容
操作演示:
1)查看当前指针所在的位置f.tell()------->‘hello’ 共5个字节,‘a+’ 是在文件末尾操作,末尾指针118+5=123
2)区别使用read,readline,readlines
read:读取文件内容,并将内容一行输出
read:取出文件的前四个字符(相当于head -c 4)
readline:读取文件内容,写入几行readilne(),输出几行
readlines:读取文件内容,返回一个列表,列表的元素分别是文件内行的内容
去掉文件每一行的空格(strip 取出广义的空格,\n \t 都属于广义的空格)
3)文件指针seek方法的使用
4.非纯文本文件读取
文件类型 | 相关查看方法 |
---|---|
读取文本文件 | r r+ w w+ a a+ |
读取二进制文件 | rb rb+ wb wb+ ab ab+ |
示例:
我们试试读取下面的二维码
当然我们也可以复制这个二维码------->生成了111.jpg,与源文件相同
5.上下文管理器
有时候打开文件忘记关闭,可以用以下方法解决
不用写f.close()
简单的即条命令生成了和/etc/passwd相同的文件
练习题:
创建文件data.txt,文件共100000行,每行存放一个1~100之间的整数