python文件操作的简单学习

本文详细介绍了Python中文件操作的基本步骤,包括如何使用open函数打开文件、各种模式的区别、文本编码设置、读写文件的方法、按行操作、缓冲机制以及文件的正确关闭。涵盖了模式选择、编码处理和常见错误处理技巧。
摘要由CSDN通过智能技术生成

文件操作

1.打开文件:
在Python中无论是从文件中读取内容还是把内容写到文件中,都需要先打开文件。打开文件使用的是内置函数open。
open函数有许多参数,在官方文档中open函数的定义如下:
open(file(必须文件路径),mode(可选,文件打开的方式),buffering(设置缓冲),encoding=none(文件编码类型),errors(报错级别),newline(区分换行符),closefd(传入的file参数类型),opener(设定自定义开启器 )

file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。

  • open函数只有file参数是必须传递的,其他的参数都有默认值。
  • 代码如下:
 file_name = "10.1.1.py"
 f = open(file_name)

输出file_name文件中的内容

如果一切正常,open函数会返回一个文件对象;如果不能被打开,open函数就会抛出一个OSError异常。
2.文件模式:
open函数中的参数mode很重要,它指明了要以何种方式打开文件。使用不同的文件方式打开文件,即使操作相同,产生的效果也会有所不同。默认的模式是“r”,即以只读的方式打开文件。文件只能阅读但不能进行写的操作。
还有r+,rb,rb+,w,wb,w+,wb+,a,ab,a+,ab+;
Python中在读取文件的时候会区分二进制和文本两种方式。如果以二进制方式打开文件(模式中带有“b”),内容将作为字节对象返回,不会对文件内容进行任何解码;如果以文本方式打开文件(模式中不带有“b”,默认是文本方式),内容将以字符串str类型进行返回,文件内容会根据平台相关的编码或者指定了的 “encoding”参数的编码进行解码。
3.文本编码:
在文本方式下,如果没有指定编码,Python解释器会根据不同的系统使用不同的编码来解码文件。在默认情况下,Python会调用标准库local的getpreferredencoding方法来获取系统的默认编码【locale.getpreferredencoding(False)】,以作为文本方式的解码文件内容的编码。
大部分系统使用的编码都是UTF-8,比如Windows操作系统默认的编码方式是GBK。Python支持非常多的文本编码,其中常见的是ASCII,Latin-1,UTF-8和UTF-16。
4.文件缓冲:
缓冲的目的是减少系统的 IO 调用,只有符合一定条件(比如缓冲数量)之后系统才调用 IO 写入磁盘。
缓冲参数buffering是用于设置缓冲策略的可选整数,设置为0时用以关闭缓冲(仅允许二进制模式下使用);设置为1时选择行缓冲(仅在文本模式下可用);当参数是大于1的整数时,可以指示固定大小的块缓冲区的大小(以字节为单位)。如果未给出缓冲参数,则默认缓冲策略工作方式如下:
二进制文件在固定大小的块中进行缓冲,缓冲区的大小则是通过使用试探法来试图确定底层设备中的“块大小”,然后将之存储到io.DEFAULT_BUFFER_SIZE变量当中。在许多系统中,缓冲区的长度通常是4096个或者8192个字节长。

文件的基本操作

1. 读取文件:

f=open("readme.txt")
txt = f.read()
print(txt)


#以上读取的是readme文件中的内容

read也可以传递参数,用于指定读取多少个字符,

f=open("readme.txt")
txt = f.read(20)
print(txt)


输出的readme文件只能读取到第20个字符

2.写文件
如果使用只读模式打开文件,那么就不能在文件上执行写的操作,所以如果要写入文件,则必须使用带“w”模式的方式打开文件。打开文件后可以使用文件对象的write方法,将任意字符串写入到文件中。Python的字符串可以是二进制数据,而不仅仅是文字。write方法返回写入文件的字符串的长度。

f=open("writeme.txt","w")
txt = "写入的文件内容"
print(f.write(txt))

输出为:
7

从结果中我们看到的结果是 —7,这表示我们成功的在’TXT’变量上写入了7个中文字符。
无论我们将上述代码执行多少次,文件的结果都只有“写入的文件内容”这7个字符,看上区好像只执行了一次。但事实并非如此,而是实际上使用了“w”模式打开文件进行写文件操作‘write’,此操作每次都会从头开始覆盖原有的内容,无论文件是否有内容,文件的内容都会被替换掉。
如果我们想在文件后面追加内容,可以在打开文件时使用“a”模式,这样就能在文件中追加写入内容了;例如加一个当前时间需要使用“datetime”模块来获取当前时间。

from datetime import datetime

f=open('appendme.txt',"a")
now = str(datetime.now())+"\n"
print(f.write(now))

在文件后面加上了当前时间的字符串

3.按行读文件
readline函数可以逐行读取文件内容。
例如:

f=open('appendme.txt',"r")

print(f.readline())

这个会打印出我们上面代码所写入的当前时间

readline和readlines都是将文件元素一行一行的打印出来。readlines函数会保留结尾的换行符,并不会去掉换行符,所以直接print列表元素会发现每次输出都跟随一个空白行,读取整个文件返回一个列表。
4.按行写文件
writelines方法,把列表作为参数写入文件,因为Python不会帮我们添加换行符。writelines接受的参数必须是列表。

f=open("writeme.txt","w")
lines = []
for i in range(10)
	lines.append(str(i))
f.writelines(lines)

这个例子运行后会在“writelines.txt”文件中生成“0---9”十个数字,并且不会换行。

5.关闭文件
要是不关闭文件就会出现异常,我们使用try except来捕获异常。

f= open("writeme.txt","w")


f.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值