Python的IO操作

Python的IO操作

一、创建和打开文件

file=open(filename[,mode[,buffering[,encoding]]])

参数说明:

  • filename:表示文件的路径,是一个字符串(要用引号括起来),如果该文件与当前的py文件在同一目录下,可以直接写文件的名字,否则需要写完整路径
  • mode:指打开文件的模式,可以不写,默认为r(只读)
  • buffering:用于指定文件的缓存模式,可以不写,默认为缓存模式,0表示不缓存,1表示缓存,大于1表示缓冲区的大小
  • encoding:指定文件打开时采用的编码格式,默认为gbk

在这里插入图片描述

二、关闭文件

一种方法是使用file.close(),这种方法需要收到关闭

建议使用第二种,用with语句打开文件,在with语句执行完成只会会自动关闭文件

with open(filename[,mode[,buffering[,encoding]]]) as file

说明:其中的file相对于就是把open打开的文件赋值给了file,这样在with语句中操作完成之后文件就会自动关闭了

三、写入文件

file.write(string)

说明:其中string为要写入的字符串

四、读取文件

1、read()

file.read([size])

说明:size为要读取的字符的数目,汉字,字母,标点符号在这里无论是在utf-8还是在gbk下都算1个字符,特别注意的是换行符也算一个字符,size也可以不写,默认读取全部内容。

因为在读取文件时一般都是在打开文件时采用r或r+模式,文件的指针在头部,文件只能从头开始读,下面介绍一个seek()方法,可以移动文件指针到你想读的位置上。

file.seek(offset[,whence])

参数说明:

  • file:表示已打开的文件对象
  • offset:表示指定移动的字节个数
  • whence:表示指针移动开始的位置。whence可以不写,默认值为0,表示从文件头开始,1表示从文件末尾开始。

特别注意:这里的offset表示的是移动字节的数目,不是字符的数目!!!这表示在不同的编码环境下移动到同一位置的offset值是不一样的。下面我举几个例子:

文件名为a.txt,内容如下

在这里插入图片描述

首先展示在utf-8编码下:

`with open('a.txt','r',encoding='utf-8') as file:
       file.seek(8)
       print(file.read())

运行结果是:

在这里插入图片描述

为什么会是这个结果呢?在utf-8中一个汉字占3个字节,换行符在windows系统中占2个字节(\r\n)。3*2+2=8,指针正好移动到"不"的前面。

在gbk编码下:

with open('a.txt','r',encoding='gbk') as file:
    file.seek(8)
    print(file.read())`

运行结果:
在这里插入图片描述

为什么又变成这个结果呢?在gbk环境下一个汉字占俩个字节,换行符在windows系统中占2个字节(\r\n)。2*4=8,指针真好定位到"不"的后面。

2、readline()

file.readline()

说明:直接从指针的位置开始读一行,直到读到换行符

3、 readlines()

file.readlines()

说明:直接从指针的位置开始读,把所有的行都读完,最后返回一个字符串列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值