加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

文件处理

发布时间:2020-12-17 00:23:27 所属栏目:Python 来源:网络整理
导读:h1 id="文件的来源"文件的来源 什么是文件 文件是操作系统提供给用户/应用程序的一种虚拟单位,该虚拟单位直接映射到硬盘空间。 处理文件 用户/应用程序直接操作文件(读/写)就被操作系统转换成具体的硬盘操作,从而实现用户/应用程序将内存中的数据永久保

<h1 id="文件的来源">文件的来源

什么是文件 文件是操作系统提供给用户/应用程序的一种虚拟单位,该虚拟单位直接映射到硬盘空间。

处理文件 用户/应用程序直接操作文件(读/写)就被操作系统转换成具体的硬盘操作,从而实现用户/应用程序将内存中的数据永久保存在硬盘中。

  1. 打开文件,得到文件句柄并赋值给一个变量f=open('test.txt','r',encoding='utf-8')
  2. 通过句柄(f)对文件进行操作data=f.read()
  3. 关闭文件f.close()f=open('test.txt',encoding='utf-8')过程分析.由应用程序向操作系统发起系统调用open().操作系统打开该文件,并返回一个文件句柄给应用程序(python解释器) _.应用程序将文件句柄赋值给变量f

    打开一个文件包含两部分资源:操作系统级打开的文件+应用程序获得的句柄变量。在操作完一个文件时,必须把与该文件的这两部分资源全部回收,为了防止忘记回收,python引入了上下文管理机制。with open()语句会自动帮你回收资源 打开文件时因为只能由操作系统操作,所以打开文件的默认编码会是操作系统的编码,在windows下是gbk,在linux中是utf-8,所以为了不乱码,文件以什么编码存储的,那么就用什么编码打开。

    python处理文件分为两种,分别为打开模式和操作文件内容模式,打开模式默认为r

    以r模式打开文件

with open(r'test.txt',mode='r',encoding='utf-8') as read_f:
    f.read()
    f.readline()
    f.readlines()
    f.readable()

当以r模式打开文件时,获得的文件句柄主要有四个方法。

  1. f.read() 读取所有内容,光标移动到文件末尾
  2. f.readline 读取一行内容,光标移动到第二行行首位置
  3. f.readlines() 读取每一行内容,存放在列表中
  4. f.readable() 判断文件是否可读以w模式打开文件
with open(r'test.txt',mode='w',encoding='utf-8') as f:
    f.write()
    f.writelines()
    f.writeable()

当以w模式打开文件时,获得的文件句柄主要有三个方法。

  1. f.write() 将内容写入文件
  2. f.writelines() 一次写入多行内容
  3. f.writeable 判断文件是否可写以a模式打开文件
with open('test.txt',mode='a',encoding='utf-8') as f:
    f.write()
    f.writelines()
1. `f.write()`
将内容追加到文件末尾
2. `f.writelines()`
将多行内容追加到文件末尾
# 操作文件内容的格式
## 打开文件的模式(默认为文本模式)
**r,只读模式【默认模式,文件必须存在,不存在则会抛出异常】**
**w,只写模式【不可读;不存在则创建新文件;存在则清空内容】**
**a,追加写模式【不可读;不存在则创建新文件;存在则只追加内容】**
## 对于非文本文件,我们只能用使用b模式,'b'表示以字节的方式操作(而所有文件都是以字节的形式存储的,使用'b'模式无需考虑文件的字符编码)
**注意:以b方式打开文件时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码**
## 其他模式
**"+" 表示可以同时读写某个文件**
**r+, 读写【可读,可写】**
**w+,写读【可读,可写】**
**a+, 写读【可读,可写】**

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

文件内指针移动

一: read(3):

  1. 文件打开方式为文本模式时,代表读取3个字符

  2. 文件打开方式为b模式时,代表读取3个字节

二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate

注意:

  1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的

  2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

文件的修改

文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,原理是把硬盘中的文件读入内存,在内存中修改完后,覆盖原来的内容。具体的说有两种实现方式:

方式一:

将硬盘存放该文件的内容全部加载到内存,修改完毕后,再由内存覆盖到硬盘中

import os

with open('test.txt') as read_f,open('.a.txt.swap','w') as write_f: data=read_f.read() #全部读入内存,如果文件很大,会很卡 data=data.replace(') #在内存中完成修改

write_f.write(data) #一次性写入新文件

os.remove('a.txt') os.rename('.a.txt.swap','a.txt')

## 方式二:
**将硬盘存放的文件一行一行读入到内存,修改完毕后就写入新文件,最后用新文件覆盖源文件**

import os with open('test.txt') as read_f,open('.test.txt.swap','w') as write_f: for line in read_f: line = line.replace() write_f.write(line)

os.remove('test.txt') os.rename('.test.txt.swap','test.txt') ```

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读