python的文件操作

主要就两种打开文件和操作文件

一、打开文件

python中打开文件有两种方式open()和file()都可以一般使用open
打开文件 :文件句柄 = open(‘文件路径’, ‘模式’,‘编码格式’)
文件句柄又被称为文件操作符,文件操作对象还有这些命名方式:f ,file , f_obj , f_handler , fh
f=open(…)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,在windows下是gbk,在linux下是utf-8。

#这就用到了上节课讲的字符编码的知识:若要保证不乱码,文件以什么方式存的,就要以什么方式打开。
f=open('a.txt','r',encoding='utf-8')

只要打开文件的编码与python解释器的编码相同就不会乱码
打开文件的模式有:

  • r:只读模式(默认模式)文件内部指针指向最开始。
  • w:只写模式,一打开就清空文件。(存在则覆盖,不存在就建立一个新的)
  • a:追加模式,(可读,文件指针指向最后)
  • ‘+’:表示可以同时读取和写入一个文件
  • r+:表示可读可写,文件指针在最开始,可以刚开始就追写但会覆盖,追加需把文件指针移到最后。
  • w+:表示可写可读,如果文件存在则会覆盖清空,然后写入,写入后可以read。
  • a+:同a

b:图片、音乐、视频等任何文件(bytes打开形式)
传输,上传下载
- rb:以bytes形式打开文件来进行读取。
- wb:清空文件然后以bytes形式来写入
- ab:以bytes形式进行追加。

读取文件的操作

  1. 读取文件的第一种方式:file.read()用read方法会一次性的读取文件中的所有内容并以字符串的类型输出。
  2. 读取文件的第二种方式:file.readline()每次执行readline就会往下读第二行并以字符串的形式输出。
  3. 读取文件的第三种方式:file.readlines()返回一个列表将列表中的每一行作为列表中的每一项
  4. 读取文件的第四种方式:for i in f ,每次只读一句内存中也只存在一行的大小,f是一个可迭代的文件流类型。

read(3)在打开文本文档时读文件内的三个字符,在以二进制形式打开的文件内则是读三个字节。

写入文件的操作

file.write(str)传入一个str类型进行写入。

文件内指针的移动

seek,tell,truncate
注意:

  1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的,常用seek(0)移动到开头,seek(0, 2)移动到最后面
  2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果,truncate()字节 从文件开始的位置只保留指定字节的内容与文件指针无关
  3.tell告诉你当前指针的位置

对于文件的修改

流程

import os
f = open('原文件',encoding='utf-8')
f2 = open('原文件.bak', 'w', encoding='utf-8')
line = f.read()
new_line = line.replace('原来的', '新的内容')
f2.write(new_line)
f.close()
f2.close()
os.remove('原文件')
os.rename('原文件.bak', '原文件')

但是这个方法很low因为这方法一次性读取了所有的文件内容,文件一大在内存中所占的资源非常大所以我们用for循环来改进。

f = open('原文件',encoding='utf-8')
f2 = open('原文件.bak', 'w', encoding='utf-8')
for line in f:
    line = line.replace('原来的内容', '新的内容')
    f2.write(line)
f.close()
f2.close()
os.remove('原文件')
os.rename('原文件.bak', '原文件')

增加一个从文件中读取信息,转变为字典类型

with open('SQL',encoding='utf-8') as f:
    for i in f:  # i为字符串
        if i.strip():  # 判断字符串是否为空
            dic = {}
            i = i.strip()  # 去除字符串两端的空格还可以去除换行符
            li = i.split()
            lis = []
            dic['name'] = li[0]
            dic['age'] = li[1]
            lis.append(dic)
print(lis)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值