Python文件读写

1打开文件

        使用python内置函数open()可打开指定的文件,用于对文件进行读取,修改或添加内容。

opem()函数的语法如下所示。

open(fliename[,mode][,encoding][,buffering][,errors][,newline][,closefd][,opener])

open()函数公有8个参数,其中最常用的有3个,分别是filename(文件名称),mode(文件模式)和encoding(文件编码方式),然后后面5个是buffering(设置缓冲),errors(报错级别),newline(区分换行符),closefd(传入的file参数类型),opener(通过调用opener方式,使用自定义的开启器)。除了filename其他都可以省略,省略时会使用默认值。

file=open("myfile.txt")
file.close()

如果打开文件时不指定模式,那么默认为“r”,以只读的方式打开文件。file.close(下面关闭文档会说为什么要这么写)

使用打开模式:

读取使用"r"

写入使用"w"

追加使用"a"

还可以指定以文本模式或者二进制模式打开文字(处理非文本文件(如:图像,exe)时使用)

例:

#文件基本操作(打开模式)
#相当于"r"或"rt"
file1 = open("myfile.txt")
print =("文件打开模式:",file1.mode)
file1.close()
#文本模式写入
file2 =open("myfile.txt","w")
file2.close()

#以二进制模式读写
file3= open("logn.jpg","r+b")#b为二进制
file3.close()

r:只读模式

只读。不可写。打开时光标自动定位到开头位置。

w:只写模式

只写,不可读。打开时自动清空原文档

a:追加模式

只写,不可读。打开时不清空元文档,光标自动定位到文档末尾。

r+:读写模式

先读再写。打开文档时不清空原内容,光标定位正在开始位置。读完后光标会移到文档末尾,所以写的时候是追加在文档最后的,不会覆盖原内容。如果以"r+"模式打开,但是先写后读,那么写入的内容会覆盖原内容,读取时从写结束位置上开始读。如果原文档内容小于新写入的,那么全部被覆盖,读到的为空。如果原文档内容大于新写入的,那么读到的内容为原文档剩下的内容。

w+:写读模式

先写后读。打开文档即清空原文档内容,从文档开头写起,写完后光标自动移到文档末尾此时进行读取,内容为空。需要将光标移到首位,f.seek(0).如果以”w+“模式打开,先进行读操作,读到的内容也是为空,因为打开即被清空。

a+:追加读写模式

先写后读。追加在文档末尾,不会清空原内容,写完后光标移到文档末尾,此时进行读取,内容为空。需要将光标移到首位,f.seek(0).如果以"a+“模式打开,先进行读操作,读到的内容也是为空的

,因为打开即被把光标定位在文档末尾。

文件默认的编码依赖于平台,在windows系统中,默认编码为“cp936”:在Linux系统中,默认编码为“UTF-8”,可以看到不同平台默认的编码是不一样的。

2关闭文件

当完成对文件的操作时,需要适当地关闭,以释放与该文件绑定的资源,可以使用vlose()函数关闭文件。

1,常规方式close()方法关闭工作,使用这种方式并不安全,因为在对文件一些操作时很有可能会引发IOError.一旦出错,代码将会退出而无法执行关闭文件的代码。

2,异常处理

更安全的方式使用try--finally块,即使出现异常。也可以确保文件能够正确的关闭。

3,使用with语句

Python引入with语句,这可以确保当with中的块退出时,文件被安全地关闭。

#常规方式
file1  = open("my_file.txt")
file1.close

#异常处理
try:
    file1  = open("my_file.txt")
finally:
    file1.close()

#使用with语句
with open("my_file.txt") as f:#文件相关操作,不用显示调用close()

文件读操作:

python的文本的内容读取,必须以读“r”模式打开文件,常用的有三种方法:read(),readline(),readlines()

1 read()

       read()是最简单的一种方式,一次读取文件的所有内容放在一个大字符串中。read()函数可以传递参数来读取文件指定编码的字符数,如果没有传递参数则表明读取并返回到文件末尾。

with open("my_file.txt","r",encoding="utf-8") as f :#my_file自己写的一个txt文档
    print(f.read(1))
    print(f.read(2))

2 readline()

        readline()逐行读取文本,结果是一个list。readline()采取逐行读取,所以占用内存少,同时速度比较慢。

with open("my_file.txt","r") as f :
    line = f.readline()
    while line:
        line = line.rstrip("\n")
        print(line)
        line = f.readline()
        

3 readlines()

readlines一次性读取文本的所以内容,结果是一个列表(list)。readlines读取的文件内容,每行末尾都会带一个“\n”换行符(可以使用list.ttrio("\n")去除换行符)readlines()一次性读取文本内容,速度比较快。但readlines()随着文本的增大,占的内存会越来越大。

with open("my_file.txt","r") as f :
   for line in f.readlines():
       line_print = line.rstrip("\n")
       print(line_print)

文件写操作:

为了写入文件,需要以写“w”模式打开。追加则使用“a”或者独占创建使用"x"。在使用“w”模式时需要时需要小心,因为如果文件存在,则会进行覆盖,以前的所以数据都将被清除。如果要向文件追加内容,使用模式“a”。Python的文件写操作常用的方式有wirte()和writelines().

1,wirte()

        wirte()把参数内容写到文件中。wirte()并不会在字符串后加上一个换行符,需要手动添加。

with open("my_file.txt","w",encoding="utf-8") as f:
    f.write("hello python")
    f.write("\n")
    f.write("你好 python")

2 ,writelines()

writelines()把多行内容写到文件中,参数可以是一个可迭代对象,列表,元组等。

list1 = ["hello python","\n","你好 python"]
with open("my_file.txt","w",encoding="utf-8") as f:
    f.writelines(list1)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值