Python之文件处理

 

 

一、文件处理流程

1.打开文件,得到文件句柄并赋值给一个变量

2.通过句柄对文件进行操作

3.关闭文件

示例:

f = open('可能否_a','a',encoding='utf-8')

f.write('文本追加在最后')
f.write('\n写在最后一行')

f.close()

### 为了方便 不每次都需要使用 f.close() 函数,一般使用如下形式打开文件 ###

with open('可能否_a','a',encoding='utf-8') as f:
    f.write('文本追加在最后')
    f.write('\n写在最后一行')

 或

import configparser

config = configparser.ConfigParser()
config.read("example.ini")   # 阅读文件 example.ini

config.write(open('example_new.ini','w'))  # 将修改的内容放在 example_new.ini 中
# 直接写 open('example_new.ini','w') 不用 f = 它的时候,是可以不用加上 f.close() 命令的

 

二、文件打开模式

打开文件的模式有:

  *  r ,只读模式【默认模式,文件必须存在,不存在则出现异常】

  * w ,只写模式【不可读,不存在则创建,存在则清空内容】

  * x ,只写模式【不可读,不存在则创建,存在则报错】

  * a ,追加模式【可读,不存在则创建,存在则值追加内容】

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

  * r+ ,读写【可读,可写】

  * w+ ,写读【可读,可写】

  * x+ ,写读【可读,可写】

  * a+ ,写读【可读,可写】

示例

f = open('可能否_w','r+',encoding='utf-8')

f.write('abcd')  #只将第一行对应的位置的字符串替换成所要替换的字符串

f.close()

 

“”  b “”表示以字节的方式操作

  * rb 或  r + b

  * wb 或 w + b

  * xb 或 w + b

  * ab 或 a + b

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

例如:

f = open('test.py','rb')       #b的方式不能指定编码

 

三、文件内置函数 flush

flush原理:

  1.文件操作是通过软件将文件从硬盘读取到内存

  2.写入文件的操作也都是存入内存缓冲去buffer(内存速度快与硬盘),如果写入文件的数据从内存刷到硬盘,内存与硬盘的速度延迟会被无限放大,效率变低,所以要刷到硬盘的数据我们统一往内存的一小块空间即buffer中放,一段时间后操作系统会将buffer中数据一次性刷到硬盘

  3.buffer即 ,强制将写入的数据刷到硬盘、

flush作用:

  在使用Python编辑文件时,文件内容会被保存在内存中,在这时打开文件是无法看到文件内容的变动的,需要执行一次flush(),Python才会将编辑在内存的内容更新到硬盘中,这时才能在打开文件后看到文件内容的变动 

示例:

 

四‘文件内光标移动

注意:read(3) 代表读取3个字符,其余的文件内光标移动都是以字节为单位如 seek,tell,read,truncate

 

五、文件内置函数 tell

作用:显示光标所在位置

字节数:一个中文字为三个字节,换行符为一个字节,一个字母为一个字节

示例:

文本内容:

代码内容:

 

输出结果

 

 六、文件内置函数 seek(x,y)

作用:控制光标的移动

使用示例:

 

*****第一种模式*****

# 光标默认从文本开头开始 

# 默认情况下,y 为 0(一般不用输入,只需知道它称为模式 0 )

文本内容:

代码:

输出:

 

*****第二种模式*****

# 必须要文件是以 b 的方式打开

# 根据相对位置(即上一个光标所移动到的位置),对光标进行移动

# y 为 1 (称为模式 1 )

文本内容:

 

代码:

输出:

 

 

*****第三种模式*****

# 必须要文件是以 b 的方式打开

# 根据相对位置(即上一个光标所移动到的位置),对光标进行移动

# y 为 2 (称为模式 2 )

# 使用案例:日志文件

文本内容:

 

代码:

输出:

 

七、文件内置函数  truncate(x)

作用:文件截断(从文件开头一直到第x个位置截断输出)(即将文件只保留从0到x个字节的内容)

注意:文件必须以写方式打开,但不能再 ‘w+’ 或 ‘w’ 的打开方式 下使用

示例:

原文本:

代码:

输出:、

执行代码后的文本:

 

八、循环文件的推荐方式

with open('日志文件','rb') as f:
    for i in f:  # 这样子也是一行一行的取值,而不是先在内存中存一大段东西

 

posted @ 2019-04-29 23:55  Jony-2018  阅读(192)  评论(0编辑  收藏  举报