zoukankan      html  css  js  c++  java
  • 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 # # =>['静夜思 李白
    ', '床前明月光,
    ', '疑是地上霜。
    ', '举头望明月,
    ', '低头思故乡。
    ', '
    ', '一寸光阴一寸金,寸金难买寸光阴
    ', '
    ', 'I love you']

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

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

      <1> 语法使用

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

      <2> 'w'模式方法

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

    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(['你真棒!
    ','我爱你!
    '])

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

      <1> 语法使用

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

    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('普天同庆
    ',encoding='utf-8'))
    4     # 方法二
    5     file.write('日月同辉
    '.encode('utf-8'))

      输出结果

      <3> ‘ab / a+b’

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

      Python源码

    1 with open("'b'模式打开文件1",'ab') as file:
    2     file.write('九星连珠
    '.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='')
  • 相关阅读:
    invalid expression: missing ) after argument list in xxx 或者 console.error(("[Vue warn]: " + msg + trace));
    js的alert()
    第9节列表渲染
    第8节条件渲染
    第7节class与style绑定
    CF1215D Ticket Game 博弈论
    CF833A The Meaningless Game 思维
    蚯蚓 队列
    洛谷P2566[SCOI2009]围豆豆
    ants 思维
  • 原文地址:https://www.cnblogs.com/fl-blogs/p/13085266.html
Copyright © 2011-2022 走看看