python file文件操作–内置对象open
说明:
1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作。
2. file参数表示的需要打开文件的相对路径(当前工作目录)或者一个绝对路径,当传入路径不存在此文件会报错。或者传入文件的句柄。
复制代码
复制代码
a = open(‘test.txt’) # 相对路径
a
<_io.TextIOWrapper name=’test.txt’ mode=’r’ encoding=’cp936’>
a.close()a = open(r’D:\Python\Python35-32\test.txt’) # 绝对路径
a
<_io.TextIOWrapper name=’D:\Python\Python35-32\test.txt’ mode=’r’ encoding=’cp936’>
复制代码
复制代码
3. mode参数表示打开文件的模式,常见的打开模式有如下几种,实际调用的时候可以根据情况进行组合。
打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。
打开文件的模式有:
r ,只读模式【默认】
w,只写模式【不可读;不存在则创建;存在则清空内容;】
x, 只写模式【不可读;不存在则创建,存在则报错】
a, 追加模式【可读; 不存在则创建;存在则只追加内容;】
“+” 表示可以同时读写某个文件
r+, 读写【可读,可写】
w+,写读【可读,可写】
x+ ,写读【可读,可写】
a+, 写读【可读,可写】
“b”表示以字节的方式操作
rb 或 r+b
wb 或 w+b
xb 或 w+b
ab 或 a+b
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型
t为文本读写,b为二进制读写
复制代码
t为文本读写,b为二进制读写
a = open(‘test.txt’,’rt’)
a.read()
‘some text’
a = open(‘test.txt’,’rb’)
a.read()
b’some text’
r为只读,不能写入;w为只写,不能读取
a = open(‘test.txt’,’rt’)
a.write(‘more text’)
Traceback (most recent call last):
File “
其它不一一举例了
复制代码
4. buffering表示文件在读取操作时使用的缓冲策略。
0: 代表buffer关闭(只适用于二进制模式)
1: 代表line buffer(只适用于文本模式)
>1: 表示初始化的buffer大小
5. encoding参数表示读写文件时所使用的的文件编码格式。
假设现在test.txt文件以utf-8编码存储了一下文本:
复制代码
复制代码
a = open(‘test.txt’,’rt’) # 未正确指定编码,有可能报错
a.read()
Traceback (most recent call last):
File “
x+: x+和w+一样, 只是额外的存在一个功能, 那就是文件存在则报错.
a+ 读写文件
最重要的特征,读取文件以后, 指针指向最后, .
读的时候, 从前往后读,
写完以后, 指针指向末尾
复制代码
print(“————-a+: 打开文件,执行指向最后, 调整指针位置读取————–”)
a+: 可以读可以写
f = open(“d:/data.txt”, “a+”, encoding=”utf-8”)
当前指针指向位置, 使用a+的方式, 打开的同时指针已经在最后的位置
print(f.tell())
读取三个字节, 读取内容为空, 因为指针指向最后
str = f.read(1)
读取3个字符后指针的位置
print(f.tell())
重新将指针指向开始
f.seek(0)
读取指针的位置
print(f.tell())
读取一个字符
str= f.read(1)
一个字符后,指针的位置
print(f.tell())
print(str)
f.close()
复制代码
文件操作常用方法
- close 关闭文件.
python2.6 以后有一个with语句. 可以自动关闭文件.不用手动关闭
复制代码
1 #with自动关闭打开的file.无需手动调用close()方法
2 with open(“data.txt”,”r”,encoding=”utf-8”) as f:
3 str = f.readline()
4 print(str)
5
6 # with 还可以同时打开两个文件. 可以用于文件拷贝. 例如:将文件1的内容拷贝到文件2
7 with open(“data.txt” ,”r”, encoding=”utf-8”) as f1, open(“data1.txt”, “w”, encoding=”utf-8”) as f2:
8 #读取文件1的每一行数据, 写入到文件2
9 for line in f1:
10 f2.write(line)
复制代码
2. flush 将文件从缓冲区刷新到硬盘
write到file的内部,在进程没有结束之前, 都是保存在内存中, 通过flush方法可以将文件刷到硬盘上
复制代码
1 f = open(“data.txt”,”r+”,encoding=”utf-8”)
2 f.write(“再次添加内容2”)
3 # 手动调用flush方法,将write的内容刷入硬盘
4 #f.flush()
5 str = input(“请输入:”)
6
7 #在执行到input时, 进程没有结束, 文件write的内容保存在内存中, 并没有保存在硬盘上.
8 # 放开 f.flush(),手动刷新内存中的文件到硬盘上
复制代码
将文件输入到硬盘有三种方法
1. 手动调用close()方法
2. 进程结束, 自动刷新内存中内容到硬盘
3. 手动调用flush()方法, 手动刷新内存中内容到硬盘
复制代码
1 print(“===== flush 刷新文件内部缓冲区 =======”)
2
3 #1. 手动调用close()方法
4 f = open(“data.txt”,”w”,encoding=”utf-8”)
5 f.write(“新添加的内容”)
6 # 执行f.close()后,会自动调用flush将write的内容写进硬盘.
7 f.close()
8
9
10
11 # 2. 进程结束, 自动刷新内存中内容到硬盘
12 f = open(“data.txt”,”r+”,encoding=”utf-8”)
13 f.write(“再次添加内容1”)
14 # 进程结束, 也会自动将write的内容刷如硬盘
15
16
17
18 # 3. 手动调用flush()方法, 手动刷新内存中内容到硬盘
19 f = open(“data.txt”,”r+”,encoding=”utf-8”)
20 f.write(“再次添加内容2”)
21 # 手动调用flush方法,将write的内容刷入硬盘
22 f.flush()
23 str = input(“请输入:”)
复制代码
truncate: 截断数据,仅保留指定之前数据
复制代码
1 # truncate: 截断数据,仅保留指定之前数据
2 f = open(“data1.txt”, “r+”, encoding=”utf-8”)
3 #f.seek(5)
4 # 一个参数, 指定保留字符个数
5 f.truncate(20)
6 # f.flush()
7 f.seek(0)
8 str = f.read()
9 print(str)
10 f.close()
复制代码
运行前文件内容:
运行后文件内容: