Python3-文件对象、函数

文件打开方式——open内建函数

file_object = open("file_name",mode="r")

file_name:    

  • open 函数的第一个参数是要打开的文件名字符形式(文件名区分大小写)

    • 如果文件 存在,返回 文件操作对象
    • 如果文件 不存在,会 抛出异常

mode:

  •  r:以读方式打开,不存在报错
  •  w:以写方式打开,不存在创建
  •  a: 以追加方式打开
  •  b:以二进制方式打开

# 1.打开文件
fr = open("/etc/hosts", mode="r")  # r: read
# 2.读取文件
print(fr.read(5))  # 读取前5个字符
print(fr.read(3))  # 接着向后读3个字符
print(fr.read())   # 读取文件剩余的所有内容
print(fr.read())   # 什么都读取不到,因为指针已经在末尾了
# 3.关闭资源
fr.close()

读取文件

read():按字符读取

readline():按行读取

readlines():读取所有(剩余的)行,并以字符串列表返回结果

  • read 方法可以一次性 读入返回 文件的 所有内容

  • close 方法负责 关闭文件

    • 如果 忘记关闭文件会造成系统资源消耗,而且会影响到后续对文件的访问
  • 注意read 方法执行后,会把 文件指针 移动到 文件的末尾

# 1.打开文件
fr = open("/etc/hosts",mode="r")
# 2.文件操作
print(fr.readline(),end="") # 获取第一行
print(fr.readline(),end='') # 获取第二行,print换行加指针换>行共2行
fr.close()   # 3.关闭资源


print("------------------------------")
fr1 = open("/etc/hosts",mode="r")
###data = fr1.readlines()
#print(data)
#print(data[0])
for line in fr1: # for line in fr1.readlines():
    print ("line:",line,end="")
fr.close()

readline 方法 —— 按行读取

  • read 方法默认会把文件的 所有内容 一次性读取到内存
  • 如果文件太大,对内存的占用会非常严重
  • readline 方法可以一次读取一行内容
  • 方法执行后,会把 文件指针 移动到下一行,准备再次读取
#demo02_read.py 按行读取
# 1.打开文件
fr = open("/etc/hosts",mode="r") 
# 2.文件操作
print(fr.readline(),end="") # 获取第一行
print(fr.readline(),end='') # 获取第二行,print换行加指针换>行共2行
fr.close()   # 3.关闭资源

readlines 方法

readlines()方法读取所有(剩余的)行然后把它们作为一个 字符串列表 返回

  • 如果需要逐行处理文件,可以结合 for 循环迭代文件
  • 迭代文件的方法与处理其他序列类型的数据类似
# 1.打开文件
fr2 = open("/etc/hosts", mode="r")
# 2.读取文件
# 和for连用
# data = fr2.readlines()
# print("data:", data)
# print(data[0])  # 第一行
# print(data[1])  # 第二行
for item in fr2:  # 相当于:for item in fr2.readlines():
    print(item, end="")
# 3.关闭资源
fr2.close()

文件指针

  • 文件指针 标记 从哪个位置开始读取数据

  • 第一次打开 文件时,通常 文件指针会指向文件的开始位置

  • 当执行了 read 方法后,文件指针 会移动到 读取内容的末尾

    • 默认情况下会移动到 文件末尾
  • 重新打开文件时,文件指针 重新指向文件的最 开始位置

解决大文件读取

# 1.打开文件
fr = open("/etc/passwd", mode="r")
# 2.读取文件
while True:  # 死循环
    data = fr.readline()  # 某一行数据
    if len(data) == 0:  # 文件读取完毕,终止循环
        break
    print("data:", data, end="")
# 3.关闭资源
fr.close()

写入操作

write 方法 —— 写文件

  • write() 内建方法功能与 read()readline() 相反

    • 它把含有 文本数据二进制数据 的内容写入到文件中去
# write 方法
# 1.打开文件
fw = open("/opt/dc.txt", mode="w")  # w: write
# 2.写文件
fw.write("hello world\n")
fw.write("you are my baby girl~\n")
# 3.关闭资源
fw.close()

writelines 方法

  • readlines() 一样,writelines() 方法是针对 列表 的操作
  • 它接受一个 字符串列表 作为参数,将他们写入文件
  • 行结束符并不会被自动加入,所以如果需要的话,必须再调用 writelines() 前给每行结尾加上行结束符
# writelines 方法
list01 = ["hello\n", "world\n", "nfx\n"]
# 1.打开文件
fw1 = open("/opt/tc.txt", mode="w")
# 2.写文件
fw1.writelines(list01)
# 3.关闭资源
fw1.close()
# hello
# world
# nfx

with 子句

  • with语句 是用来简化代码的
  • 在将打开文件的操作放在 with 语句中,代码块结束后,文件将自动关闭
  • 读写文件的逻辑没有变化,变得只是 写法
  • with open('/tmp/passwd', mode="r") as f:

综合案例

# 模拟 cp 操作
# 1. 创建 cp.py 文件
# 2. 将 /usr/bin/ls   "拷贝" 到/tmp 目录下
# 3. 不要修改原始文件
fr = open("/usr/bin/ls", mode="rb")  # rb:读取二进制
fw = open("/tmp/myls",mode="wb")  # wb:写二进制
while True:
    data = fr.read(4096)  # 4096字节 = 4k
    if len(data) == 0:  # 文件读取完毕,终止循环
        break
    fw.write(data)  # 将读到的数据写入文件
fr.close()
fw.close()

#总结:首先确定文件类型,当不知道文件大小类型时采用rb考虑内存

函数

定义:可以重复调用的代码块

使用步骤:1.定义函数——封装独立的功能 

                   2.调用函数——享受封装的成果

语法:

        def  函数名(参数列表):

                封装代码

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值