(十二)文件处理基础

本文详细介绍了Python中文件的各种操作方法,包括文件的打开、读取、写入及关闭等基本操作,探讨了不同模式下的文件处理技巧,如文本模式与二进制模式的区别,以及如何在实际应用中灵活运用这些技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件处理

小试牛刀

文件句柄=open(文件路径,mode=文件的打开模式,encoding=字符编码)

with open('aaa.txt',mode='r',encoding='utf-8') as f:
    print(f.readable())
    print(f.read())
    f.closed
>>>True
>>>你好,世界之窗

该地方采用相对路径,若采用绝对路径,需要加转义符r

默认就是mode=r 只读
以上操作涉及两方面的资源

  1. 操作系统需要打开文件
  2. f就是一个python 的变量
CharacterMeaning
‘r'open for reading (default)
‘w'open for writing, truncating the file first
‘a'open for writing, appending to the end of the file if it exists
‘b'binary mode
‘t'text mode (default)
‘+'open a disk file for updating (reading and writing)
‘U'universal newline mode (for backwards compatibility; should not be used in new code)
文件的两种打开模式

1、 默认为文本模式

r: 默认的打开模式,只读模式,文件如果不存在则报错
w: 只写模式,不可读,不存在则创建,存在则清空内容复写
a:只追加写模式,(写模式的一种)不可读,不存在则创建,存在则只追加内容,不复写。指针直接到末尾,通常用于记录log

with open ('aaa.txt',mode='r',encoding='utf-8') as f:
    print(f.readline())     #只读一行,并把光标移动到下一行的首位置,可连续放n行可以读取n行数据
    print(f.readlines())   #将文件内容全部读出并放于列表内
    
>>>你好,
>>>
>>>['你好,\n', '世界之窗\n', '我来了']



with open('111.txt',mode='w',encoding='utf-8') as f:
    f.write('hello')
    print(f.writable())
    
    L=['bruce',"said,he couldn't be caged"]
    print(f.writelines(L))


with open('222.txt',mode='a',encoding='utf-8') as f:
    print(f.readable())
    print(f.writable())
    f.write('你好\n 这世界,我来了')
    

a 写模式的一种,

2、非文本模式(b模式,即二进制)

比如mp3,mp4,jpg等格式,只能用b模式,b表示以字节的方式操作,无需考虑字符编码。以b方式打开时,读取的内容是字节类型,写入时也需要提供字节类型,不能指定编码

with open('4.jpg',mode='rb') as f:
    print(f.readable())
    print(f.writable())
    print(f.read())
    
>>True
>>>False

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

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

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

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

f.read() #读取所有内容,光标移动到文件末尾
f.readline() #读取一行内容,光标移动到第二行首部
f.readlines() #读取每一行内容,存放于列表中

f.write('1111\n222\n') #针对文本模式的写,需要自己写换行符
f.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,需要自己写换行符
f.writelines(['333\n','444\n']) #文件模式
f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式


f.readable() #文件是否可读
f.writable() #文件是否可读
f.closed #文件是否关闭
f.encoding #如果文件打开模式为b,则没有该属性
f.flush() #立刻将文件内容从内存刷到硬盘
f.name

文件内光标移动

一: 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+等模式下测试效果
  3.
  

文件的修改

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

方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)

import os

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

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

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

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

import os

with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
    for line in read_f:
        line=line.replace('alex','SB')
        write_f.write(line)

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

转载于:https://www.cnblogs.com/morron/p/8950817.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值