Python学习第五天——文件操作

文件处理

1.什么是文件?

文件是操作系统提供给用户或程序的一种操作硬盘的机制/功能。

2.为何用文件?

有了文件我们可以避免直接操作硬盘,只需操作文件。

3.如何使用文件?

(1)应用程序打开文件,拿到一个文件对象/文件句柄。
(2)调用文件句柄下的读写操作。
(3)关闭文件回收系统资源。

python两种地址书写格式:
①原始字符串 以r开头,r’D:\python’。
②反斜杠 ‘D:/pyhton’

打开文件的方式:
①f(文件对象/文件句柄) = open(‘aaa/a.txt’,moder = ‘r’ , encoding = ‘utf-8(文本模式需要编辑,二进制模式不需要。)’)
需要自己主动关闭文件。
②使用with关键字(自动关闭文件)
with open(‘aaa/a.txt’,mode=‘rt’, encoding=‘utf-8’) as f,
open(‘aaa/b.txt’,mode=‘wt’, encoding=‘utf-8’) as f1,
open(‘aaa/c.txt’,mode=‘wt’, encoding=‘utf-8’) as f2:
f2.write(‘111\n’)
r = f.read()
print( r )

文件模式mode:
1.控制文件读写的操作模式
r 只读模式,文件不存在会报错,文件存在指针跳到文件开头。
w 只写模式,文件不存在会创建新的文件,文件存在会打开并清空文件,并把指针移到开头。如果文件没有关闭,则像追加模式一样,并不会清楚文件信息,而是继续追加。
a 追加模式,文件不存在创建新文件,并将指针移到文件尾部。文件存在,指针移到末尾进行追加。
2.控制文件读写内容的操作
t(文本模式,默认):只能放文本,需要设置encoding。
b(二进制模式,binary):可以打开所有类型文件。
用 for line in f(文件名): (减少大文件卡顿)

具体操作:
读:
with open(‘aaa/a.txt’,mode=‘rb’)as f:
res = f.read()
t = res.decode(‘utf-8’)
print(t)
写:
with open(‘aaa/hello.txt’,mode=‘wb’)as f:
f.write(‘你好’.encode(‘utf-8’))
注意:每一次的读写操作都会把指针移到最后面。
.seek(n,模式)
n,代表移动的字节个数(只有在t(文本)模式下的read(n)(rt)代表的是字符个数,除此之外都是字节个数)。
模式:
0,参照物是文件开头位置。
f.seek(3,0)当前指针在第三个字节。
1,参照物是文件当前指针的位置。
开始为 f.seek(9,0)
f.seek(3,1) 当前位置为第12个字节的位置。
2,参照物是文件的末尾,应该倒着移动。
f.seek(-3,2) 从后往前数

编码:
ASCII 8bit
GBK 16bit 2Byte
unicode: 支持万国字符 常用2Bytes,生僻4Byte
①第一个万国字符。②兼容老的编码表。
utf-8:英文1Byte,中文3Byte。
保证文件不乱码:
①存储是不乱码。
②什么编码方式存,什么编码方式取。
③字符串转换为Unicode编码,在前面加U

python3解释器默认utf-8,python2解释器默认ASCII。
python3的变量值的存储格式为unicode。
编码:
y = x.encoded(‘GBK’)
y = bytes(x.encoding = ‘GBK’)
解码:
y = x.decode(‘utf-8’)

文件处理:
.read() #读取所有内容。
.readline() #读取一行的内容。
.readlines() #读取每一行的内容。
.write() #针对文本模式的写,需要自己写换行符。
.write( ,encode(‘utf-8’)) #针对二进制模式的写。
.writelines( [‘333\n’,‘444\n’]) #文本模式
.writelines([bytes(‘333\n’,encoding = ‘utf-8’),‘444\n’.encode(‘utf-8’)]) #二进制模式
.readable() #文件是否可读
.writable() #文件是否可写
.closed #文件是否关闭
.encoding 如果b模式无此属性
.flush() 立刻将文件内容从内存刷到硬盘
.name 文件路径

文件的修改

文件只有覆盖没有修改。
方法一:
①将文件一次性读入内存。
②在内存中将内容修改完毕。
③将新内容写回文件。

#方法一:
with open(r'aaa\b.txt',mode='r',encoding='utf-8')as f:
    data = f.read()
    res = data.replace('111','222')
    with open(r'aaa\b.txt',mode='w',encoding='utf-8')as f1:
        f1.write(res)

方法二:
①读模式打开源文件,写模式打开一个新文件。
②从源文件中读出一行内容,进行修改再写入新文件,循环往复读完整个源文件。
③删除源文件,将临时文件改名。

#方法二:
import os

with open(r'aaa\b.txt',mode='r',encoding='utf-8')as f ,\
    open(r'aaa\.b.txt.swp',mode='w',encoding='utf-8')as f1:
    for line in f:
        f1.write(line.replace('222','333'))

os.remove(r'aaa\b.txt')
os.rename(r'aaa\.b.txt.swp',r'aaa\b.txt')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值