Python文件操作

对文件的读写操作,编码问题,OS模块,递归。


文件的读写:

读文件:

    过程:

        1.找到文件

        2.打开文件

        3.读取文件内容

        4.关闭文件

找到文件和打开文件

path = r"E:\hello.txt"

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

f = open(path,"r")

data = f.read()

print(data)

file :打开文件的路径

mode:打开方式  r 制度的方式打开文件,文件的引用放在开头

rb 以二进制方式打开只读文件,文件引用在开头

r+ 以读写方式打开文件,文件的引用在开头

w 以只写方式打开文件,如果该文件已经存在,则将其内容覆盖,如果不存在则会创建文件

awb 以二进制方式打开只写文件,如果该文件已经存在,则将其内容覆盖,如果不存在则会创建文件

w+ 以读写方式打开文件,如果该文件已经存在,则将其内容覆盖,如果不存在则会创建文件

a 打开一个文件用于追加的,如果该文件已经存在不会将内容覆盖,放在末尾,如果不存在则创建文件

a+  打开一个文件用于读写的,如果该文件已经存在不会将内容覆盖,放在末尾,如果不存在则创建文件

encoding:编码方式

errors:错误处理。

返回值:

    文件描述符(本质就是一个引用),通过文件描述符可以操作文件

f = open(path,"r")

f = open(path,"rb")

f = open(path,"rb",encoding="GBK")

f = open(path,"rb",encoding="utf-8",errors="ingore")

读取文件内容

str1 = f.read()

print(str1)

读取指定字节数

str2 = f.read(12)

print(str2)

读取整行的

str3 = f.readline()

print(str3)

读取所有行并返回列表

list4 = f.readlines()

print(list4)

文件使用完必须关闭,因为文件对象占用操作系统的资源,并且操作系统同一时间能打开的文件的数量是有限的。

 

读取文件的原理是从文件描述符位置向后读取。

当读完的时候修改文件描述符的位置

print(f.tell())

f.seek(0)#文件描述符位置修改

写文件:

过程:1.找到文件

      2.打开文件

      3.将内容写入缓冲区,此时内容没有写入文件

      4.刷新缓冲区<直接把缓冲区的数据立刻写入文件>

            刷新缓冲区的方式:

                a.程序结束的时候

                b.关闭文件的时候

                c.手动刷新  flush()

                d.\n c语言里的

                e.缓冲区满了

      5.关闭文件

path = r"E:\hello.txt"

f = open(path, "w")

f.write("XiaoHa is a nice man")

f.flush()

f.close()

编码与解码:

    编码:

        .encode

    解码:

        .decode

with open(path,"wb") as f :

    info = "i want fuck you!哈"

    info = info.encode("utf-8")

    f.write(info)

with open(path,"rb")as f2:

    info = f2.read()

    print(info)

    info = info.decode("utf-8")

    print(info)

StringIO:

    作用:数据的读写不一定都是文件,也可以在内存中读写,作用是在内存中读写文件的

BytesIO:

    作用:StringIO只能操作字符串,BytesIO可以操作二进制数据,作用是在内存中读写bytes

from  io import StringIO

from io import BytesIO

f = StringIO()

#写

f.write("XiaoHa")

f.write(" is good man")

info = f.getvalue()#只能读取f写入内存中的数据

print(info)

f0 = StringIO("good \n nice\n")

f0.read()

f1 = BytesIO()

#f1.write("小哈").encode("utf-8")

print(f1.getvalue())

os模块

作用:包含了普片的操作系统功能,提供了非常丰富的方法来处理文件和目录

使用:

import os

print(os.name)

nt  windows

posix  linux unix

print(os.uname)#Linux,Unix下获取详细的系统信息

print(os.environ)#获取系统中的环境变量

print(os.environ.get("WINDIR"))#获取指定环境变量的值。

print(os.curdir)#得到的是当前目录

 

print(os.getcwd())#得到当前工作目录的绝对路径

print(os.listdir())#返回指定目录下的所有文件, listdir 没有路径返回当前工作路径下的。

os.mkdir(path)#创建目录

os.rmdir(path)#删除目录

print(os.stat(path))#得到文件信息

os.rename()#重命名

os.remove()#删除普通文件

#运行shell命令/

os.system("notepad")#打开text文档

#操作文件和目录的函数一部分妨碍os模块中,还有一部分妨碍os.path中

print(os.path.abspath("."))#返回指定路径的绝对路径

print(os.path.join("",""))#拼接路径

print(os.path.split(r""))#拆分路径

print(os.path.splitext())#获取文件扩展名

print(os.path.isdir())#判断是否是目录(必须存在),是返回True 否则False

print(os.path.isfile())#判断普通文件(文本文件)是否存在,存在返回True,否则返回False

print(os.path.exists())#判断文件和目录是否存在

print(os.path.getsize())#获取文件大小

print(os.path.basename())#获得文件名

print(os.path.dirname())#获取文件路径。

递归:

    1.自身调用自身形成递归

    2.两个函数相互调用形成递归

递推:

递归调用:一个函数调用自身,称为递归调用

递归函数:一个会调用姿势很的函数称为递归函数

凡是函数能干的事,递归都能干,

递归三步:

1.写出临界条件

2.找这一次和上一次的关系

3.假设当前函数已经能用,调用自身计算上一次的结果,再求出本次结果

在以后的开发过程避免使用递归,容易造成内存泄露,效率比较 偏低。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值