9、文件操作

一.文件处理流程

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件
f=open('a.txt','w')
f.write('111111
')
f.close()

二.基本操作

2.1 文件编码

#不指定打开编码,默认使用操作系统的编码,windows为gbk,linux为utf-8,与解释器编码无关
f=open('chenli.txt',encoding='gbk') #在windows中默认使用的也是gbk编码,此时不指定编码也行
f.read()

  

2.2 文件打开模式

f=open('文件名','模式')
f=open('a.txt','r+') #读写
f=open('a.txt','w+') #写读
f=open('a.txt','a+') #追加并且读
    。
    。
    。
    。
    。
    。

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

打开文件的模式有:

  • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
  • w,只写模式【不可读;不存在则创建;存在则清空内容】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;   不存在则创建;存在则只追加内容】

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】

 "b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

常见的mode取值组合

r或rt 默认模式,文本模式读
rb 二进制文件

w或wt 文本模式写,打开前文件存储被清空
wb 二进制写,文件存储同样被清空

a 追加模式,只能写在文件末尾
a+ 可读写模式,写只能写在文件末尾

w+ 可读写,与a+的区别是要清空文件内容
r+ 可读写,与a+的区别是可以写到文件任何位置

2.3 上下文管理

1 #上下文管理
2 with open('a.txt','r',encoding='utf-8') as f,open('b.txt') as b_f:
3     # print(f.read())
4     print('====>')

补充

 1 for i in range(3):
 2     print(i)
 3     # continue
 4     if i == 1:
 5         break
 6 else:
 7     print('=============>') #当for循环不被break打断,就会执行else的代码
 8 
 9 with open('a.txt','r',encoding='utf-8') as read_f,
10         open('aa.txt','w',encoding='utf-8') as write_f:
11 
12     for line in read_f:
13         write_f.write(line)
14     else:
15         print('write successfull')

2.4 文件的操作方法

f.read                            读取文件所有内容

f.read                            读取文件所有内容

f.readline                      读取一行内容

f.readlines                    读取每行内容,返回一个列表

f.close()                        关闭文件

f.seek()                         移动指针到指定位置

f.tell()                           获取当前指针位置

f.flush()                        把缓存写入到硬盘

f.mode()                       显示文件打开格式

f.truncate()                   f.truncate(10)截取文件0-10字符,超出部分删除

f.writelines()                传入一个列表,并将列表每个元素写入到文件

f.xreadlines()                已迭代方式循环文件,每循环一次,只读一行。处理大文件效率高

 1 #不常用的,了解
 2 
 3 with open('a.txt','r',encoding='utf-8') as f:
 4     print(f.read(4)) #数字指的是读的是字符
 5 
 6 with open('a.txt','rb') as f:
 7     print(f.read(1)) #数字指的是读的是字符
 8 
 9 
10 with open('a.txt','r',encoding='utf-8') as f:
11     f.seek(3) #seek内指定的数字代表字节
12     print(f.tell()) #当前光标所在的位置
13     print(f.read())
14 
15 with open('aa.txt','r+',encoding='utf-8') as f:
16     # f.seek(3) #seek内指定的数字代表字节
17     # print(f.read())
18 
19     f.truncate(1)
20 
21 
22 with open('b.txt','rb') as f:
23     f.read()
24     f.seek(3) #默认情况,是以文件起始位置作为开始,往后移动3个bytes
25     f.read(1)
26     print(f.tell())
27     f.seek(2,1) #1 代表以当前光标所在的位置为开始,往后移动2个 bytes
28     print(f.tell())
29 
30     f.seek(-1,2) #2表以当前光标所在的位置为开始,往后移动2个 bytes
31     print(f.tell())
32 
33     f.seek(0,2)
34 
35 with open('c.txt','r',encoding='utf-8') as f:
36     f.seek(0,2)
37     print('====>',f.read())

2.5 文件的修改

 1 import os
 2 with open('a.txt','r',encoding='utf-8') as read_f,
 3         open('.a.txt.swap','w',encoding='utf-8') as write_f:
 4     for line in read_f:
 5         if line.startswith('hello'):
 6             line='哈哈哈
'
 7         write_f.write(line)
 8 
 9 os.remove('a.txt')
10 os.rename('.a.txt.swap','a.txt')
原文地址:https://www.cnblogs.com/deasion/p/6880658.html