一、文件的读写
读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。
读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
1、读文件
f = open("/tmp/passwd") #注意我们这里尽量不要用系统的原文件进行操作,可以复制到/tmp目录下,这是一个临时存放目录;
print(f)
我们看的的结果如下:
难道是我们没有复制成功吗;我们打开/tmp/passwd看看
那么请你再看看下面的打开方式;
f = open("/tmp/passwd")
print(f.read())
当我们对这个文件产生read动作时,则可以读取到文件内容;我们代对这个文件进行操作时会有很多选项:
这里需要强调的是当我们在pycharm中打开文件进行操作时,系统会把文件内容把开并保存在内存中,所以一般我们打开文件后都要有关闭的动作;把文件内容从内存中释放掉,以便节约空间;
f.close()
注意:如果文件不存在, open() 函数就会抛出一个 IOError 的错误,并且给出错误码和详细的信息告诉你文件不存在;
2、对文件进行操作
read()会一次性读取文件的全部内容,如果文件有 10G,内存就爆了;那么我们应该怎么办?
我们用下面的一条公式来解决我们文件操作:
print("after-文件打开状态:",f.closed)
r 以读的方式打开,定位到文件开头 , 默认的 mode
r+ 以读写的方式打开,定位文件开头 , 可以写入内容到文件
w 以写的方式打开,打开文件的时候会清空文件的内容,并且不能读
w+ 以读写的方式打开,定位到文件头,并且打开文件的时候也会清空文件的内容
a 以写的方式打开,定位到文件的末尾,是一个追加的操作 , 但并不允许读
a+ 以读写的方式打开,定位到文件的末尾,追加的方式,若文件不存在则会创建这个文件。
(1)r
1. 文件不存在, 则报错;
2. 'r'模式打开文件, 不会清空文件的所有内容
3. read?(yes) write?(no)
不可写;
可读;
(2)r+
1.文件不存在, 则报错;
2.'r+'模式打开文件, 不会清空文件的所有内容
3.read?(yes) write?(yes)
(3) w:
1. 文件不存在, 则创建文件;
2. 'w'模式打开文件, 先清空文件的所有内容
3. read?(no) write?(yes)
(4)w+:
1.文件不存在, 则创建文件;
2.'w+'模式打开文件, 先清空文件的所有内容
3.read?(no) write?(yes)
'w+'模式打开文件, 先清空文件的所有内容
(5)a:
1.文件不存在, 则创建文件;
2.定位到文件的末尾,是一个追加的操作
3.read(no);write(yes)
(6)a+
1. file not exist, create(若文件不存在则会创建这个文件);
2. write(yes), read(yes)
3. 追加写入的内容到最后;
二、对文件读取的集中操作
1、查看文件内容的一行
f = open("/tmp/passwd")
print(f.readline(),end=' ')
f.close()
2、查看文件的所有内容
f = open("/tmp/passwd")
file = f.readlines()
for i in file:
print(i,end=' ')
f.close()
3、查看文件的路径
f = open("/tmp/passwd")
print(f.name)
f.close()
4、查看文件的关闭状态
print(f.closed)
5、查看字符编码
f = open("/tmp/passwd")
print(f.encoding)
f.close()
6、seek方法,
移动指针 seek第一个参数是偏移量: >0, 代表向右移动, <0,代表向左移动 ,=0,代表不动;
seek第2个参数是: 0:移动指针到文件开头 1: 不移动指针; 2:移动指针到文件末尾
f = open("/tmp/passwd")
print(f.seek(0,2))
f.close()
7、f.tell()函数,返回当前文件指针的偏移量
f = open("/tmp/passwd")
print(f.tell())
8、f.flush()函数,将缓冲区的内容写入到硬盘中
9、f.fileno() 函数,返回当前的文件描述符,一个数字
10、f.isatty() 函数,当前打开的文件是否是一个终端设备
三、对文件快速清空
'w'模式打开文件, 先清空文件的所有内f = open("/tmp/passwd", 'w')
f.close()
四、文件的写操作
1、给文件内写入操作
f = open("/tmp/passwd",'a+')
# 文件写入时,也会移动指针,
f.write("hello")
f.close()
2、写入一行内容
f = open("/tmp/passwd",'a+')
# 文件写入时,也会移动指针,
f.writelines(['\ngcc\n', 'c++\n'])
f.close()
3、将列表内容加入到文将当中
f = open("/tmp/passwd",'w')
li = ['user1', 'user2', 'user3']
# 文件写入时,也会移动指针,
f.writelines([line+"\n" for line in li])
f.close()