文件相关操作及函数相关部分内容

文件的基本操作

  文件的基本操作分为三步骤:1.打开文件

               2.操作文件

                  3.关闭文件

1. 打开文件

  关键字: open

f = open(r'a.txt', 'r',  encoding='utf8')
# f = open(r'a.txt', 'r', encoding='utf-8')
print(f)   # 操作系统打开的文件

# 当encoding=‘utf8’ 报错时,就换成 encoding=‘utf-8’。

2. 操作文件: 读、写

复制代码
res = f.read()
print(res)

# 关闭文件:释放资源
f.close


# 方式2:
# with上下文管理器
with open('a.txt', 'r' ,encoding='utf8')  as f:
      print(f.read())
复制代码

文件的读写模式

  r:read(读)

  w:write(写)

  a:append(追加写)

复制代码
# 读模式
# 1. 路径不存在,直接保存
with open('a.txt', 'r', encoding='utf8') as f:
    pass


#2. 路径存在
with open('a.txt', 'r', encoding='utf8') as f:
      print(f.read())

# 写模式
# 1. 路径不存在,会自动创建出文件
with open('a.txt', 'w', encoding='utf8') as f:
      pass

'''
我们真正的代码以后是运行在Linux系统里面的
'''

# 2. 路径存在
# 把文件内的原本数据清除掉,重新写入,覆盖之前所有的数据
# w模式很危险
with open('a.txt', 'w', encoding='utf8') as f:
      f.write(str())   # 写文件的数据类型必须是字符串和字节类型,其他类型都不能直接写入
复制代码
复制代码
# 3. 追加模式
# 3.1 路径不存在,会自动创建文件出来
with open('a.txt', 'a', encoding='utf8') as f1:
      f1.write('hello baby!')
      pass

# 3.2 路径存在,在文件的原来数据后面继续追加新的内容
with open('a.txt', 'a', encoding='utf8') as f1:
      f1.write('hello baby!\n')
复制代码

文件的操作方法

1. 读系列

# 1.读系列
with open('a.txt', 'r', encoding='utf8') as f:
      print(f.read())
# 一次读取文件的一行内容,一行一行的读取
       print(f.readline())   # hello worldhello baby!hello baby!
       print(f.readlines())   # ['hello world\n', 'hello baby!\n','hello baby!\n', 'hello baby!\n']  \n 换行符也算是字符
# 判断文件是否可读
       print(f.readable())

2. 写系列

# 2.写系列
with open('a.txt', 'w', encoding='uft8') as f:
      f.write('helllo baby')
      f.write(str(123))   # 只能写字符串
      print(f.writebale())   # True
      print(f.readable())    # False
      f.writelines(['hello\n, 'world\n', 'kevin' ,'jack'])

文件的读操作优化

with open('a.txt', 'r' ,encoding='uft8') as f:
    print(f.read())   # 一次性把文件中的内容读取完毕
   read 方法是一次性读取文件的所有内容,所以,当文件内容非常大的时候,有可能会造成内存溢出,我们是不允许内存溢出的情况出现,但是当文件内容非常小的时候,无所谓了,针对上述出现的问题,该如何解决呢?

  变量f是支持for循环的

for line in f:
     print(line)   # for循环就是一行一行的读取内容的

'''

所以,以后读文件的时候,如果觉得文件很大,我们就是for循环一行一行的读取

'''

文件操作模式

t模式:text文本

  r >>>>  rt

       w >>>> wt

  a >>>> at

'''

  1. 它是以字符串为基本单位

  2.只能操作字符串形式

  3.encoding参数必须写

'''

b 模式: bytes二进制模式

  r >>>>  rb

  w >>>> wb

  a >>>> ab

'''

  1.b 不能省略,必须写rb

  2.可以操作任意的数据类型:视频、音频、图片等都可以

  3. encoding参数一定不能写

  4. 数据以字节为单位

'''

复制代码
"""
    1. 如果是t模式,read里面写的数字代表的是读取的字符个数
    2. 如果是b模式,read里面写的数字代表的是读取的字节个数
    3. 一个字节代表一个英文字符
    4. 一个中文字符使用三个字节保存
"""
# with open('a.txt', 'r', encoding='utf8') as f:
#     print(f.read(3)) # 你好啊

with open('a.txt', 'rb') as f:
    #
    print(f.read(10).decode('utf8')) # 你好啊
复制代码

文件内指针的移动

  指针有三种模式:0、1、2.

    f.seek(offset,whence)
 whence:
            # 0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的(支持tb模式)
            # 1: 该模式代表指针移动的字节数是以当前所在的位置为参照的(只用于字节模式)
            # 2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的(只用于字节模式)
with open('a.txt', 'rb') as f:   
    f.seek(3,0)    
    print(f.read())   
    f.seek(-3,1)  # 负数代表的是往相反方向移动    
    f.seek(-3,2)  # 负数代表的是往相反方向移动    
    print(f.tell()) # 7 查看光标现在移动的位置    
    print(f.read())  # loworld     
    print(f.read())  # 读取内容为空

文件的修改

  文件的修改:一次性读出文件内容再赋值给变量,通过调用变量量.replace文件的修改内置方法替换,在写入文件中。

with open('a.txt', 'r', encoding='utf8') as f:
    data = f.read()

res = data.replace('kevin', 'tank')
print(res)

with open('a.txt', 'w', encoding='utf8') as f:
    f.write(res)

函数简介

1.为什么会有函数?

  1.我们现在所写的代码都不够简洁,调用函数可以避免写重复的代码。

  2.我们现在所写的代码兼容性不强。

2.函数的定义

  函数就是类似于一个工具,就是先提前定义好一个功能,后面相使用,直接调用函数即可。

3.函数的语法结构

  def index(a,b):

    ''' 函数注释 '''

    print(123)

    return

复制代码
"""
1. def 定义函数的关键字(不能省略)
2. my_len
    函数名,不能省略,必须写
    函数名的命名遵循变量的命名
3. def my_len(参数1,参数2):
    参数是可有可无的
    参数就是在执行函数的时候要提前满足的条件
4. 函数注释
    可有可无,一般情况函数注释是用来介绍函数的功能、参数代表的意思,以及返回值的情况等信息
5. 函数体
    函数体也是可有可无的,但是,没有函数体的函数没有意义的,pass
6. 函数的返回值
    关键字:return
    返回值也是可有可无的,一个函数只能有一个return返回值
"""
复制代码

4.函数的定义与调用

1. 函数必须先定义在调用

2.函数在定义阶段只会检测语法错误,不执行函数体代码

3.只有在函数调用阶段,才会执行函数体代码

4.如何调用函数

    函数名加括号,如果有参数,在调用的时候参数也要被传送过去

函数在定义阶段和调用阶段的底层原理:

1. 在内存空间中申请一块地址,来存储函数体代码

2.把函数体代码所在空间地址绑定给函数名

3.通过调用函数来执行函数体代码

5.函数的分类

1.内置函数:Python解释器自带的函数,可以直接拿来使用

2.自定义函数

  2.1 无参函数

    没有参数的函数:def index():

              pass

  2.2 有参函数

    括号里有参数的函数就叫有参函数: def index(a,b):

                      print(a+b)

                     index(1,2)

  2.3 空函数

    空函数就是没有函数体的代码,可以帮我们梳理思路

复制代码
def register():
    pass

def login():
    pass

def order():
    pass

def car_shopping():
    pass

def address():
    pass
复制代码

6.函数的返回值

''' 

  1. 函数内如果没有return关键字,则函数的返回结果就是None

  2. 函数内如果只有return关键字,则函数的返回结果也还是None

  3.函数内若有return关键字,return后面写什么就返回什么,谁调用,返回结果就给谁

  4. 函数内遇到return关键字,程序就直接终止运行

  5. 一个函数内只能有一个return结果

     6. return后面也可以返回多个值,如果使用逗号隔开,那么就以元组的形式返回,也

能够直接返回列表、字典等类型

复制代码
# 1.返回值为None
def my_min(x,y):
    pass    # 没有函数体代码
res = my_min(1,2)
print(res) # None

# 2.返回值为None
def my_min(x,y):
    return
res = my_min(1,2)
print(res)   # None

#3.return 后面写啥就返回啥值
def my_min(x,y):
    return 1
res = my_min(1,2)
print(res)   # 1


# 4.可返回多个值,值之间用逗号隔开,以元组形式返回
def my_min(x,y):
    return 1,2,3,3
res = my_min(1,2)
print(res)   #(1, 2, 3, 3)
复制代码

 

posted @   Maverick-Lucky  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示