python文件操作

1. 文件的打开方式

1.1 open

python在对文件进行编辑的时,首先需要打开文件获取文件对象,然后调用一系列函数对文件对象进行操作。

file = open(file_name, mode, buffering, encoding, newline)
参数简介:

  1. file_name: 被打开文件的路径/文件名。
  2. mode :文件打开方式,详情见下表。
  3. buffering : 设置缓冲区大小,
    负数 :使用默认的缓冲区大小
    0 : 关闭缓冲区(仅二进制模式打开允许);
    1 : 行缓冲,即遇到换行符则将缓冲区内容写入磁盘(仅文本模式允许);
    n (n > 1) :自己设定的缓冲区大小(单位:字节)
  4. encoding :指定编码格式
  5. newline :默认为None,可以设定为'',\n,\r,\r\n

文件的打开方式

字符含义文件不存在时
r只读模式(默认),指针放开头报错
w只写(覆盖写)创建新文件
a追加写(仅有写权限),指针放末尾创建新文件
?b以2进制模式打开,其他同上同上
?+同时获取读和写的权限,其他同上同上

下面对buffering和newline做出详细解释:

buffering参数

此参数的作用是设置程序读写文件时缓冲区的大小。通常程序在向文件中写入数据的时候,会先写入内存(缓冲区)中,等到缓冲区满了才会一次性将内存的内容写到磁盘里。

引申:
但是当我们写出如下函数时

file = open('f:\\1.txt','w')
file.write('hello world')

这里没有调用file.close()对文件进行保存关闭,那么文件1.txt中不应该有内容。而事实上文件中是有内容的,查了资料说是因为当程序结束后,会自动调用file.flush()函数刷新缓存,同时将缓存中的内容写入到对应的文件中。

为了证实上述说法,我加入了sleep()函数来延迟程序的结束

import time

file = open('f:\\1.txt','w')
file.write('hello world')
time.sleep(60)

在60s内函数为结束前,打开文件查看发现hello world并未被写入到文件中,当程序结束时,字符串则会自动写入。

综上所述:
程序在写入数据时,由于磁盘读写速度的问题,往往都会先写到内存中,但是当程序结束时,会默认调用flush()函数刷新内存,强制将内存的数据写入的磁盘中。

因此,为了避免某些以外的发生在使用file.open()打开文件以后,一定要使用file.close()将文件进行关闭(类似于我们手动的save-> close)

newline参数

写入内容时:
None(默认参数) : 将文本中的\r都转换为\n输入到文件中
‘’ :不做任何改变,将文本原样输入到文件中
\r :将文本中的\n都转换为\r输入到文件中
\r\n :将文本中的\n都转换为\r\n输入到文件中

从文件中读取数据时
None : 换行符都变成\n
'' : 原样输出

注意:windows默认的换行为\r\n而linux为\n,可以设置newline=''的方式打开文件并读取内容(利用repr()函数将特殊字符显示出来),可以清晰地看到两个平台换行的差异


1.2 with as

上面在使用open()函数打开文件时,强调过要注意使用close()函数对操作过的文件进行关闭;但是如果当你在操作文件的过程中出现了差错,由于程序还没有运行到close()语句,那么往往就会导致文件不能及时关闭。而with as语句可以很好地解决这个问题。

with 表达式 as target:
	code

作用是将表达式的返回值赋值给target,如下:

with open('f:\\1.txt') as f:
	...

就是将open函数返回的文件对象赋值给了变量f,相当于f = open('f:\\1.txt')

使用with as作为上下文管理器可以对文件对象的获取和释放做出及时的处理。


1.3 文件对象的属性

  • file.name : 返回文件名
  • file.mode :返回文件的打开模式
  • file.encoding :返回打开文件时的编码格式
  • file.closed :判断文件是否关闭

2. 基础操作函数

2.0 文件指针

2.0.1 什么是文件指针?

文件指针你可以联想到我们在记事本中打字时,屏幕上的光标。python在向文件读取和写入文本内容的时候,往往是在文件指针出进行读取和写入的。也就相当于我们在打字的时候,每次输入的文字都是从光标处开始。


2.0.2 相关函数

  • file.tell()

    返回文件指针的位置(0为开头)

  • file.seek()

    seek(offset, whence), 对文件指针进行重定位。

    参数:

    1. offset: 指针偏移量,正数向后偏移,负数向前偏移。由whence参数先对指针进行定位,然后由offset参数对指针进行前/后偏移。
    2. whence: 指定指针的位置。0为开头(默认值),1为当前位置,2为末尾。(当whence参数非0时,需要以二进制形式打开文件)

2.1 read系列

  • file.read([size])

    非二进制模式打开:逐个字符读取文本内容,
    二进制模式打开文件:逐个字节读取文本内容
    通过参数size指定读取长度,默认读取全部内容。

  • file.readline([size])

    按行读取,读取文本的一行内容.
    参数size:在读取一行中,size指定读取改行的长度

  • file.readlines()

    按行读取,读取所有行,返回一个列表,每行为一个列表元素


2.2 write系列

  • file.write(string)

    将字符串string写入文件file中

    write为覆盖写,若文字指针处于文本之前,写入的内容会覆盖原本的内容。

    file.write(string)会返回string的长度

  • file.writelines(string)

    将参数string的内容写入文件中

    file.writelines()的返回值是None


2.2.1 writewritelines的区别:

writelines的参数可以是字符序列(不能是数字序列)

y = ['hello',' ','world','!']
x = open('f:\\1.txt','w')
m = x.writelines(y)
x.close()
hello world!

write的参数必须是字符串:

y = ['hello',' ','world','!']
x = open('f:\\1.txt','w')
m = x.write(y)
x.close()

Traceback (most recent call last):
  File "e:\code\python\py_study\test.py", line 3, in <module>
    m = x.write(y)
TypeError: write() argument must be str, not list

2.3 删除文件内容

file.truncate([size])

从指针位置开始,清除size大小的数据,如果没有给定size则清除指针后所有的内容。

此函数在调用时必须具备权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值