文件操作
一、文件操作一般分为3步
1.打开
2.操作
3.关闭
1.打开文件
open("文件名称",字符编码).read()
open():打开文件
read():读文件
例子:
>>> data = open("/etc/passwd",encoding="utf-8").read()
>>> print (data)
这样只是对于读文件来说我们这样操作。
例子2:
(1)打开文件
如果是要操作文件内容的话,我们就不这样操纵了。
f = open("/etc/passwd",encoding="utf-8")
#我们把打开文件的内容负值给一个变量(内存对象),我们就方便找到这个文件内容。我们这种方式称为"文件句柄".句柄包含了"文件的名称","字符集","大小","在硬盘的起始位置"。
(2)读文件
f.read()
问题:我们将的的操作同时赋值给两个变量。但是第二个变量的值为空。
cat /root/a
1
2
3
>>>f = open("/root/a")
>>>r = f.read()
>>>r_1 = f.read()
>>> print (r)
1
2
3
>>> print (r_1)
>>>
我们可以这样理解,我们第一次赋值r的时候,文件的光标已经读取到最后一行。再将f.read()赋值给r_1的时候,文件只能接着上次光标的位置继续读,所以读到是空内容。
要想重新读取内容,我们让光标重新回到第一行就可以了。
2、写操作
注意:python中读和写是不能同时进行的。
例子:
>>> f = open("/root/a") #open是默认是读模式的。
>>> r = f.read()
>>> print (a)
1
2
3
>>> f.write('hello world')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
io.UnsupportedOperation: not writabl #不可写
注意:写操作是创建一个文件,原来文件中有内容,直接会被清空。
例子:
>>> f = open('/root/hello','w')
>>> f.write('hello')
5
>>> f.close()
解释:w说明hello文件处于写模式
close()是关闭文件操作
在linux中写操作要注意,写完毕之后一定要关闭。否则在linux的系统中看不到 写入的内容.
3.追加模式
a:是append的意思
例子:
>>> f = open('/root/hello','a')
>>> f.write('bbbb')
4
>>> f.close()
它避免了w模式覆盖原有内容的问题。但是依然不能读。
4.读行
readline() :一行一行的读取内容
>>> f = open('/etc/passwd','r')
>>> print(f.readline())
root:x:0:0:root:/root:/bin/bash
>>> print(f.readline())
bin:x:1:1:bin:/bin:/sbin/nologin
readline(数字),从第一行开始读,读4个字符。
>>> print(f.readline(4))
root
从上次的位置继续向后读取6个字符。
>>> print(f.readline(6))
:x:0:0
读取多行
#!/usr/bin/env python
file = open('/etc/passwd')
for i in range(5):
print (file.readline())
file.close()
5.高效读行
但是readline()方法读行效率不高,
我们在工作中用这种循环效率是最高的。
for i in file:
print (i)
这种打印形式使用了迭代器。
我们用这种形式读指定的行(读取了第二行)
#!/usr/bin/env python
f = open('/etc/passwd')
a = 1
for line in f:
if a == 2:
print ('----------------')
print (line)
a+=1
6.显示文件读取的位置。
tell():显示文件读取到得位置
seek():移动文件读取的位置,可以理解为光标的位置。
例子1:
>>> f = open('/root/pass','r')
>>> print (f.readline())
root:x:0:0:root:/root:/bin/bash
>>> print (f.tell())
32
>>> print (f.readline())
bin:x:1:1:bin:/bin:/sbin/nologin
>>> print (f.tell())
65
例子2:移动读取的位置。
>>> f = open('/etc/passwd','r')
>>> print(f.readline())
root:x:0:0:root:/root:/bin/bash
>>> print (f.tell())
32
>>> print(f.readline())
bin:x:1:1:bin:/bin:/sbin/nologin
>>> print (f.tell())
65
>>> f.seek(32)
32
>>> print(f.readline())
bin:x:1:1:bin:/bin:/sbin/nologin
我们又开始从32的位置开始读。
7.刷新函数flush() 将写内容同步到硬盘。
>>> f = open('/root/test','a')
>>> f.write('aaaaa') 此时在另一终端tail -f查看,没有数据
5
>>> f.flush() 在查看就有数据了。
8.查看文件编码
>>> f.encoding
'UTF-8'
9.模拟进度条
stdout:标准输出:向屏幕输出。
#!/usr/bin/env python
import time
import sys
for i in range(100):
sys.stdout.write('#')
sys.stdout.flush()
time.sleep(1)
10.读写模式
r+:读和追加的模式
w+:写读模式。创建新文件,会清空原有得内容。用的不多。
rb:读取二进制。