python file文件操作--内置对象open

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()
复制代码

文件操作常用方法

  1. 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()
复制代码
  运行前文件内容:

  运行后文件内容:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值