Python基础——文件处理(Open) (20.06.12)

Python——文件处理(Open)

文件处理

  Python提供了用于文件处理的内置函数Open来进行文件处理操作。通常所说文件分为两类:文本文件二进制文件。文本文件就是简单的文本,二进制文件包含了只有计算机能够识别的二进制数据。

  文件处理主要包含:文件创建打开追加关闭等操作。

 

文件处理操作

1.文件处理流程

  在对文件进行处理操作时,采用Python内置函数Open()函数,需要文件路径文件名文件的打开模式文件的编码方式等。(注:为了便捷,需要处理的文件一般与Python源文件放在相同的文件路径下

  文件处理流程:打开文件——读/写操作——关闭文件

  1)手动关闭文件

  "文件处理"txt文档内容:

  Python源码:

1 # open(打开文件)——read(阅读文件)——close(关闭文件)
2 # 文件名为"文件处理"txt格式的文档与源文件在相同的路径之下
3 file = open('文件处理','r',encoding='utf-8')
4 # ‘文件处理’:是文件路径和文件名,txt文件与源文件相同路径下,直接写文件名打开文件;
5 # 'r':以只读的形式打开文件;
6 # encoding='utf-8':编码方式为utf-8,不指定编码方式默认系统编码。
7 data = file.read()   # 阅读文件
8 print(data)  # 打印内容
9 file.close()  # 关闭文件

  输出结果:

  2)系统自动关闭文件

  with:采用with关键字方法打开文件,不再使用close方法手动关闭文件,系统会自动关闭文件。

  <1> 打开一个文件

1 with open('文件处理','r',encoding='utf-8') as file:   # with...as...  冒号
2     data = file.read()   # 缩进
3     print(data)

  <2> 打开多个文件

1 with open('文件处理','r',encoding='utf-8') as file , open('文件处理','r',encoding='utf-8') as file_one: # 打开多个文件时,中间使用逗号分隔
2     data = file.read()
3     data_one = file_one.read()
4     print(data)
5     print(data_one)

2.文件处理基本模式

  文件处理基本模式有:‘r模式,‘w’模式,‘a’模式。

  • 'r':以只读模式打开,只能读取文件内容但不能编辑/删除/写入文件的任何内容,文件不存在读时会抛出异常
  • 'w':以写入模式打开,如果文件存在将会删除文件内所有内容,然后打开这个文件写入内容
  • 'a':以追加模式打开,写入到文件内的任何数据会自动添加到末尾

   1)’r‘:只读模式,读出来的数据全部为字符串

   <1> 语法使用

1 file = open('文件处理','r',encoding='utf-8')  # ‘r’:只能阅读,不能写

  <2> ’r‘模式方法

  ① readable():判断文件是否为只读,返回布尔值(True 或 Fasle)

1 file = open('文件处理','r',encoding='utf-8') 
2 print(file.readable())
3 
4 # =>True

  ② readline():一次阅读一行(每一行有换行符,打印出来会有一空行,可用end=''取消空行)

1 file = open('文件处理','r',encoding='utf-8')
2 print('1',file.readline(),end='')   # 第1行
3 # =>1 静夜思 李白
4 print('2',file.readline(),end='')   # 第2行
5 # =>2 床前明月光,
6 print('3',file.readline(),end='')   # 第3行
7 # =>3 疑是地上霜。

  ③ readlines():打印文件全部内容存放于一个列表中

1 file = open('文件处理','r',encoding='utf-8')
2 print(file.readlines())
3 # # =>['静夜思 李白\n', '床前明月光,\n', '疑是地上霜。\n', '举头望明月,\n', '低头思故乡。\n', '\n', '一寸光阴一寸金,寸金难买寸光阴\n', '\n', 'I love you']

   2) 'w':只写模式,只能写入字符串

  • 文件存在时:只写模式,只能写,不能读,读会报错,清空原有文件内的所有内容,再重新写入;
  • 文件不存在时:只写模式,会创建一个新的文件,再写入。

  <1> 语法使用

1 file = open('文件处理','w',encoding='utf-8')  # ‘w’:只能写,不能读
2 # file.read()   # 不能读,只能写,会报错

  <2> 'w'模式方法

  ① write():写入信息(注意‘\n’)

1 file = open('文件处理','w',encoding='utf-8')
2 file.write('Are you ok')

  ② writable():判断是否为只写,返回布尔值(True 或 False)

1 file = open('文件处理','w',encoding='utf-8')
2 file.writable()

  ③ writelines():写入内容,以列表形式传递

1 file = open('文件处理','w',encoding='utf-8')
2 # file.writelines(['你真棒!\n','我爱你!\n'])

  3)’a‘:追加模式,在原文件内容的基础之上再添加新内容,不会清空原始内容;含有’r‘/'w'模式所有方法,追加内容在文件末尾。

  <1> 语法使用

1 file = open('文件处理','a',encoding='utf-8')  # ‘a’:在原始数据之上追加内容
2 file.write('一寸光阴一寸金,寸金难买寸光阴\n')
3 file.writelines(['I love you\n','Are You OK\n'])

3.文件处理其它模式

  1)‘+’模式:表示同时读写某个文件

  • ‘r+’:以读写方式打开文件,可对文件进行读和写操作;
  • ‘w+’:清空文件内容,然后以读写方式打开文件;
  • ‘a+’:以读写方式打开文件,并把文件指针移动到文件末尾。 

   2)‘b’模式:表示以字节的方式操作文件(注:‘b’模式不能指定编码)

  <1> ‘rb / r+b’:

  "‘b‘模式打开文件"txt文本内容

  Python源码

1 with open("'b'模式打开文件",'rb') as file:
2     data = file.read()
3     print(data)
4     print(data.decode('utf-8'))

  输出结果

   <2> ‘wb / w+b’:

  “'b'模式打开文件1”txt文本内容:空文本

  Python源码

1 with open("'b'模式打开文件1",'wb') as file:
2     # 方法一
3     file.write(bytes('普天同庆\n',encoding='utf-8'))
4     # 方法二
5     file.write('日月同辉\n'.encode('utf-8'))

  输出结果

  <3> ‘ab / a+b’

  “'b'模式打开文件1”txt文本内容

  Python源码

1 with open("'b'模式打开文件1",'ab') as file:
2     file.write('九星连珠\n'.encode('utf-8'))

  输出结果

4.文件操作其它方法

  1)”文件操作其它方法“txt内容

  2)方法

  <1> closed():判断文件是否关闭,返回布尔值(True/False)

1 file  = open('文件操作其它方法','r',encoding='utf-8')
2 print(file.closed)

  <2> encoding():显示文件打开的编码模式 

1 file  = open('文件操作其它方法','r',encoding='utf-8')
2 print(file.encoding)
3 # =>utf-8

  <3> flush():刷新缓冲区

1 file  = open('文件操作其它方法','r',encoding='utf-8')
2 file.flush()

  <4> name():显示文件名

1 file  = open('文件操作其它方法','r',encoding='utf-8')
2 print(file.name)
3 # =>文件操作其它方法

  <5> read(x):阅读字符串,x为参数,read(x)代表阅读x个字符,其余的文件内光标移动都是以字节为单位如seek、tell等。

1 file  = open('文件操作其它方法','r',encoding='utf-8')
2 print(file.read(2))
3 # =>你好

  <6> tell():显示光标当前位置

1 file  = open('文件操作其它方法','r',encoding='utf-8')
2 print(file.tell())
3 # =>0
4 file.readline()
5 print(file.tell())
6 # =>7

  <7> seek():用来控制光标的移动位置,默认从文件开头算起

1 file  = open('文件操作其它方法','r',encoding='utf-8')
2 file.seek(40)
3 print(file.tell())
4 # =>40

  <8> truncate():文件截断(在写模式操作'w')

1 file  = open('文件操作其它方法','w',encoding='utf-8')
2 print(file.truncate(10))

5.seek(x)模式

  seek(x):用来控制光标的移动位置,默认从文件开头算起.要想使用seek的其它模式需要将其装换为rb模式,字节操作模式。

  ”seek方法“txt内容:

  1)seek(x,0):x:移动字节数;0:基于文件开头位置而移动

1 file = open('seek方法','rb')
2 file.seek(10,0)
3 print(file.tell())
4 # =>10
5 file.seek(5,0)
6 print(file.tell())
7 # =>5
8 file.close()

  2)seek(x,1):x:移动字节数;1:基于上一次的光标位置而移动

1 file = open('seek方法','rb')
2 file.seek(10,0)
3 print(file.tell())
4 # =>10
5 file.seek(5,1)
6 print(file.tell())
7 # =>15
8 file.close()

  3)seek(x,2):x:移动字节数;2:基于文件末尾光标位置而移动

1 file = open('seek方法','rb')
2 file.seek(-15,2)
3 print(file.tell())
4 # =>7
5 data = file.read()
6 print(data.decode('utf-8'))
7 # =>bcdef
8 # =>你好!

  4)举例:读取文件最后一行

  <1> 方法一:遍历内容,形成列表,取最后一个(占内存)。

 1 # 第一种:
 2 file = open('seek方法','r',encoding='utf-8')
 3 data = file.readlines()
 4 print('最后一行:%s'%data[-1])
 5 # =>最后一行:你好!
 6 
 7 # 第二种:
 8 file = open('seek方法','rb')
 9 data = file.readlines()  # 阅读所有内容,形成列表,每一行为一个元素
10 print('最后一行:',data[-1].decode('utf-8'))
11 # =>最后一行:你好!

  <2> 方法二:seek方法直接取最后一行。

 1 file = open('seek方法','rb')
 2 for i in file:  # 一行一行阅读内容
 3     offs = -3   # 设置偏移量
 4     while True:
 5         file.seek(offs,2)   # 倒着阅读
 6         data = file.readlines()   # 取出内容,形成列表,每一行为一个元素
 7         if len(data) > 1:   # 判断元素个数,多于两个则表示取出了两行
 8             print('最后一行:%s'%data[-1].decode('utf-8'))
 9             break
10         offs *= 2   # 继续增加偏移量

6.循环读取文件

  for循环可以循环文件内容

1 file = open('文件处理','r',encoding='utf-8')
2 for i in file:
3     print(i,end='')
posted @ 2020-06-10 15:06  星落……  阅读(389)  评论(0编辑  收藏  举报