Py 文件操作

Py 文件操作

一、文件的编码

由于计算机只认二进制,所以我们用自然语言输入的数据需要转换成二进制后才能被计算机识别。编码就是将自然语言翻译成二进制的规则,记录了如何将内容翻译成二进制,以及如何从二进制翻译成自然语言。

文件的写入和查看需要在同一编码下才能保证内容的正确性

目前,使用最为广泛的编码为UTF-8,此外,还有多种编码(如GBK、Big5等)

二、文件的读取

对文件的操作

  • 打开文件
  • 读写文件
  • 关闭文件
打开文件

在Python中,我们可以使用打开函数open()来打开一个已存在的文件或创建一个新文件

语法:open(name, mode, encoding)

其中:name:需要打开/创建的文件的路径(str形式)

mode:打开文件的模式

模式用途
r以只读方式打开文件,文件的指针会放在文件开头(默认模式)
w打开一个文件用于写入(如果过该文件不存在,则会创建一个新文件),当写入数据时,数据从头开始写入,即原有数据会被清空
a打开一个文件用于追加内容(如果过该文件不存在,则会创建一个新文件),新写入的内容会放在原有内容之后
f = open("E:/Python/Data/test.txt", "r", encoding="UTF-8")
# 这里的f是一个习惯命名,非强制
print(type(f))
# 输出<class '_io.TextIOWrapper'>
# 即对文本文件进行IO操作功能的一个类

注意:encoding前面还有一个参数(buffering=-1),这里省略了,即encoding不是第三位,所以要用关键字传参

读取文件

注意:只有在只读(r)模式下才能读取文件

read()

语法:文件对象.read(num)

num表示要从文件中读取的数据的长度(单位为字符数),如果不传入num,则读取文件中的所有数据

readlines()

语法:文件对象.readlines()

readlines 可以按照行的形式对整个文件进行读取,并返回一个列表,其中每一行数据为一个元素

readline()

语法:文件对象.readline()

realdine一次从文件中读取一行内容

注意:当多次读取时(无论用什么形式读取),下一次读取会从上一次读取的结尾开始读取

f = open("E:/Python/Data/test.txt", "r", encoding="UTF-8")
# 打开文件
print(type(f))
a = f.read(2)
print(a)
# 读取文件

line1 = f.readline()
# 读取一行数据
# 会受到上一个读取操作的影响
print(type(line1))
print(line1)

list1 = f.readlines()
# 逐行读取并转换为列表
# 会受到上一个读取操作的影响
print(type(list1))
print(list1)

# 输出<class '_io.TextIOWrapper'>
# 你好
# <class 'str'>
# !世界!1233211234567abcbcaacbbbca
# 
# <class 'list'>
# ['1233211234567你好!世界!abcbcaacbbbca\n', '1233211234567abcbcaacbbbca你好!世界!']

for循环读取文件行

for循环可以每次从文件中读取一行内容

f = open("E:/Python/Data/test.txt", "r", encoding="UTF-8")
for line in f:
    print(line)
# 输出(输出中的换行是因为\n)
# 你好!世界!1233211234567abcbcaacbbbca
# 
# 1233211234567你好!世界!abcbcaacbbbca
# 
# 1233211234567abcbcaacbbbca你好!世界!

关闭文件
close()

语法:文件对象.close()

当程序占用文件时,其它程序无法使用该文件,我们可以通过close在程序结束前提前关闭文件

停止占用的情况:关闭文件、程序停止

import time
f = open("E:/Python/Data/test.txt", "r", encoding="UTF-8")
for line in f:
    print(line)
time.sleep(2000)
# 用sleep模拟占用情况
with open()

语法:with open(name, mode, encoding) as f

在with open语句块中,可以对文件进行操作,在操作完成后会自动关闭文件,避免遗漏close

import time
with open("E:/Python/Data/test.txt", "r", encoding="UTF-8") as f:
    for line in f:
        print(line)
time.sleep(1000)
# 此时虽然程序还在运行,但是打开的文件已经关闭

三、文件的写入

  • 打开文件open(以w模式)
  • 文件写入write
  • 内容刷新flush
  • 关闭文件close

注意:close其实内置了flush的功能

当我们直接调用write时,内容并未真正写入文件,而是积攒在程序的内存(缓冲区)中,这样是为了避免频繁操作文件,导致效率下降

import time
f = open("E:/Python/Data/20231105/test2.txt", "w", encoding="UTF-8")
f.write("Hello,world!")
# time.sleep(2000)
# 当文件不存在时,创建并写入文件,此时只是写入内存,因此如果此时程序未结束,在文件管理器中打开文件会发现文件是空白的
f.flush()
# 将内存中的内容写入硬盘
# time.sleep(2000)
f.close()
# close其实内置了flush的功能

注意:当文件存在并有内容时,写入会直接清空原有数据再写入

四、文件的追加

用a模式对文件内容进行追加,步骤依旧是open打开文件->write写入文件->flush内容刷新->close关闭文件

当文件存在,会在内容的末尾进行追加,如果文件不存在,会创建文件并进行写入

可以用\n来换行追加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值