Python 笔记 — 文件读写操作

目录

一、作用

1、概念

计算机的文件,就是存储在某种长期储存设备上的一段数据。

长期存储设备包括:硬盘、U 盘、移动硬盘、光盘等。

2、使用文件的目的

就是把一些存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。

3、存储方式

在计算机中,文件是以二进制的方式保存在磁盘上的。

4、文本文件和二进制文件

文本文件

可以使用文本编辑软件查看,本质上还是二进制文件。例如:Python 的源程序。

二进制文件

保存的内容不是给人直接阅读的,而是提供给其它软件使用的。例如:图片文件、音频文件、视频文件等等。二进制文件不能使用文本编辑软件查看。

二、基础操作

1、操作文件步骤

(1)打开文件

(2)读、写文件

  • 读:将文件内容读入内存
  • 写:将内存内容写入文件

(3)关闭文件

如果忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的访问。

序号

函数/方法

说明

01

open

打开文件,并且返回文件操作对象

02

read

将文件内容读取到内存

03

write

将指定内容写入文件

04

close

关闭文件

文件指针

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

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

3、当执行了 read 方法后,文件指针会移动到读取内容的末尾(默认情况下会移动到文件末尾)。

2、打开文件的方式

mode

说明

注意

‘r’

只读方式打开

文件必须存在

‘w’

只写方式打开

文件不存在创建文件,文件存在则清空文件内容

‘a’

追加方法打开

文件不存在创建文件

‘r+’

读写方式打开

文件的指针将会放在文件的开头。如果文件不存在,抛出异常。

‘w+’

读写方式打开

如果文件存在会被覆盖。如果文件不存在,创建新文件。

‘a+’

追加和读写方式打开

如果该文件已存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件进行写入。

3、格式

open 函数默认以只读方式打开文件,并且返回文件对象。

# 返回一个文件对象 fileobject
open(filename, mode)  # filename 是文件的路径,mode 是打开的方式

file 对象的属性

file.closed 返回 true 如果文件已被关闭,否则返回 false。

file.mode 返回被打开文件的访问模式。

file.name 返回文件的名称。

4、案例

File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。-
如果没关闭它,它就会一直占用系统资源,而且还可能导致其它不安全隐患。操作系统同一时间能打开的文件数量也是有限的。

# 1. 打开文件
f = open("123.txt", 'r')  # 要先确定有 123.txt 这个文件
# 2. 读取文件内容
text = f.read()
print(text)
# 3. 关闭文件
f.close()

print('文件名:', f.name)
print('访问模式:', f.mode)
print('是否已关闭:', f.closed)

# 运行结果:
# 文件名: 123.txt
# 访问模式: r
# 是否已关闭: True

如果执行了一次 read 方法,读取了所有内容,那么再次调用 read 方法时, 再次调用不会读取到任何的内容。-
因为第一次读取之后,文件指针移动到了文件末尾。

# 路径的两种写法,效果一样
# f = open('F:\\Python\\test.txt', 'r')
f = open(r'F:/Python/test.txt', 'r')

str = f.read(10)

print("读取的字符串是 : ", str)

运行之后会在 py 文件所在的路径中创建一个文件 test.txt,-
如果文件不存在,那么创建,如果存在那么就先清空,然后写入数据。

f = open('test.txt', 'w')
f.write('hello world, i am here!')
f.close()

由于文件读写时都有可能产生 IOError,一旦出错,后面的 f.close() 就不会调用。-
所以,为了保证无论是否出错都能正确地关闭文件,可以使用 try … finally … 来实现。

f = open('test.txt', 'r')

try:
    print(f.read())
finally:
    f.close()

三、使用

1、with 关键字

with 的作用和使用 try … finally … 语句是一样的,当离开 with 代码块的时候,系统会自动调用 f.close() 方法。

with open('test.txt', 'r') as f:
    print(f.read())

print(f.closed)  # True

使用 read(num) 可以从文件中读取数据,num 表示要从文件中读取的数据的长度(单位是字节),如果没有传入 num,那么就表示读取文件中所有的数据。

with open('test.txt', 'r') as f:
    con = f.read(4)  # 最多读取4个数据
    print(con)
    print('--'*20)
    con = f.read()  # 从上次读取的位置继续读取剩下的所有的数据
    print(con)

2、tell 方法

tell() 方法展示文件内的当前位置,换句话说,下一次的读写会发生在文件开头这么多字节之后。 seek(offset [,from]) 方法改变当前文件的位置。

offset 变量表示要移动的字节数。

from 变量指定开始移动字节的参考位置。

from 被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。

# 打开文件
f = open('test.txt', 'r')
str = f.read(10)
print("读取的字符串是 : ", str)

# 查找当前位置
position = f.tell()
print("当前文件位置 : ", position)

# 把指针再次重新定位到文件开头
position = f.seek(0, 0)
str = f.read(10)
print('重新读取字符串:', str)

# 关闭文件
f.close()

# 运行结果:
# 读取的字符串是 : test123456
# 当前文件位置 : 10
# 重新读取字符串: test123456

3、文件复制

小文件复制

# 1. 打开文件
f_read = open("test.txt", 'r')
f_write = open("test[复件].txt", "w")

# 2. 读取并写入文件
text = f_read.read()
f_write.write(text)

# 3. 关闭文件
f_read.close()
f_write.close()

文件备份

f = open('test.txt', 'r')
con = f.read()
f.close()

name = input('请输入文件名:') + '.txt'
with open(name, 'w') as f:
    f.write(con)

4、读写操作

(1)readline

read 方法默认会把文件的所有内容一次性读取到内存,如果文件太大,对内存的占用会非常严重。

# 打开文件
with open('test.txt') as f:
    while True:
        # 读取一行内容
        text = f.readline()
        # 判断是否读到内容
        if not text:
            break
        # 每读取一行的末尾已经有了一个 `\n`
        print(text, end="")

(2)readlines

readline 方法可以一次读取一行内容,方法执行后,会把文件指针移动到下一行,准备再次读取。

readlines 可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

f = open('test.txt', 'r')
con = f.readlines()
print(con)
print(type(con))

n = 1
for i in con:
    print('%d:%s' % (n, i))
    n += 1
f.close()

四、目录常用操作

有些时候,需要对文件进行重命名、删除等一些操作,Python 的 os 模块中都有这些功能。

1、文件重命名

os 模块中的 rename() 可以完成对文件的重命名操作。

rename(需要修改的文件名, 新的文件名)

import os

os.rename("原名", "新名")
os.rename('w1', '其它')

2、删除文件

os 模块中的 remove() 可以完成对文件的删除操作。

remove(待删除的文件名)

import os

os.remove("test.txt")

3、创建文件夹

import os

os.mkdir("张三")

4、获取当前目录

import os

print(os.getcwd())

5、改变默认目录

import os

os.chdir("../")
print(os.getcwd())  # 显示上一级目录

6、获取目录列表

import os

print(os.listdir())  # 获取当前目录列表
print(os.listdir('../'))  # 获取上一级目录列表

7、删除文件夹

import os

os.rmdir("张三")

五、编码格式

encoding 表示编码集,根据文件的实际保存编码进行获取数据,对于我们而言,更多的是 utf-8。

# 写入中文发现编码不对,需要修改
with open('test.py', 'w', encoding='utf-8') as f:
    f.write('哈哈哈哈')

要读取二进制文件,比如图片、视频等等,用“rb”模式打开文件即可。

f = open('test.png', 'rb')
print(f.read())
# 输出结果为十六进制表示的字节


with open('test.txt', 'wb') as f:  # 二进制写模式
    f.write(b'hello world') # 二进制写
    
with open('test.txt', 'rb') as f:  # 二进制读
    we = f.read()

print(we)  # b'hello world'
print(type(we))  # <class 'bytes'>

📝结尾

看到这里了还不给博主扣个:- ⛳️ 点赞☀️收藏 ⭐️ 关注!- 💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖- 拜托拜托这个真的很重要!- 你们的点赞就是博主更新最大的动力!- 有问题可以评论或者私信呢秒回哦。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值