15_python基础—文件操作

简介: 15_python基础—文件操作

一、文件的概念


1.1 文件的概念和作用


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

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


文件的作用


将数据长期保存下来,在需要的时候使用


思考:文件操作包含什么?


答:打开、关闭、读、写、复制…


思考:文件操作的的作用是什么?


答:读取内容、写入内容、备份内容…


总结:文件操作的作用就是把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。


1.2 文件的存储方式(二进制)


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


1.3 文本文件和二进制文件


文本文件


可以使用 文本编辑软件 查看

本质上还是二进制文件

例如:python 的源程序


二进制文件


保存的内容 不是给人直接阅读的,而是 提供给其他软件使用的

例如:图片文件、音频文件、视频文件等等


二进制文件不能使用 文本编辑软件 查看


二、文件的基本操作


2.1 文件操作步骤


在 计算机 中要操作文件的套路非常固定,一共包含三个步骤:


打开文件


读、写文件

读 将文件内容读入内存

写 将内存内容写入文件


关闭文件


注意:可以只打开和关闭文件,不进行任何读写操作。


2.2 操作文件的函数/方法


在 Python 中要操作文件需要记住 1 个函数和 3 个方法


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


如果文件 存在,返回 文件操作对象

如果文件 不存在,会 抛出异常

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


close 方法负责 关闭文件


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

注意:read 方法执行后,会把 文件指针 移动到 文件的末尾


提示


在开发中,通常会先编写 打开 和 关闭 的代码,再编写中间针对文件的 读/写 操作!


image.png


  • open 函数负责打开文件,并且返回文件对象
  • read/write/close 三个方法都需要通过 文件对象 来调用


2.2.1 打开文件的方式


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

语法如下:


f = open("文件名", "访问方式")


image.png

image.png


提示


  • 频繁的移动文件指针,会影响文件的读写效率,开发中更多的时候会以 只读只写 的方式来操作文件
  • 示例


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


注意:此时的fopen函数的文件对象。


2.2.2 文件对象方法


2.2.2.1 写–write


  • 语法


文件对象.write('内容')


  • 体验
# 1. 打开文件
f = open('test.txt', 'w')
# 2.文件写入
f.write('hello world')
# 3. 关闭文件
f.close()


注意:


w和a模式:如果文件不存在则创建该文件;如果文件存在,w模式先清空再写入,a模式直接末尾追加。


r模式:如果文件不存在则报错。


2.2.2.2 读—按行读取


read()


read 方法默认会把文件的 所有内容 一次性读取到内存

如果文件太大,对内存的占用会非常严重

注意:read 方法执行后,会把 文件指针 移动到 文件的末尾


文件对象.read(num)


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

# 1. 打开 - 文件名需要注意大小写
file = open("README")
# 2. 读取
text = file.read()
print(text)
# 3. 关闭
file.close()


readline()

readline 方法可以一次读取一行内容

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


f = open('test.txt')
content = f.readline()
print(f'第一行:{content}')
content = f.readline()
print(f'第二行:{content}')
# 关闭文件
f.close()

第一行:hello world

第二行:abcdefg


读取大文件的正确姿势


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


  • readlines( )
  • readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
f = open('test.txt')
content = f.readlines()
# ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']
print(content)
# 关闭文件
f.close()


文件指针(知道)

  • 文件指针 标记 从哪个位置开始读取数据
  • 第一次打开 文件时,通常 文件指针会指向文件的开始位置
  • 当执行了read方法后,文件指针会移动到读取内容的末尾
  • 默认情况下会移动到 文件末尾


思考


如果执行了一次 read 方法,读取了所有内容,那么再次调用 read 方法,还能够获得到内容吗?


答案


不能


第一次读取之后,文件指针移动到了文件末尾,再次调用不会读取到任何的内容


2.2.2.3 seek()—用来移动文件指针


作用:用来移动文件指针。


语法如下:


文件对象.seek(偏移量, 起始位置)


起始位置:


  • 0:文件开头
  • 1:当前位置
  • 2:文件结尾


2.2.2.4 关闭


文件对象.close()


三、文件备份


需求:用户输入当前目录下任意文件名,程序完成对该文件的备份功能(备份文件名为xx[备份]后缀,例如:test[备份].txt)。


3.1 步骤


  1. 接收用户输入的文件名
  2. 规划备份文件名
  3. 备份文件写入数据


3.2 代码实现


  1. 接收用户输入目标文件名


old_name = input('请输入您要备份的文件名:')


  1. 规划备份文件名
    2.1 提取目标文件后缀
    2.2 组织备份的文件名,xx[备份]后缀
# 2.1 提取文件后缀点的下标
index = old_name.rfind('.')
# print(index)  # 后缀中.的下标
# print(old_name[:index])  # 源文件名(无后缀)
# 2.2 组织新文件名 旧文件名 + [备份] + 后缀
# [:index]切片,从开始到.之前的索引值
new_name = old_name[:index] + '[备份]' + old_name[index:]
# 打印新文件名(带后缀)
# print(new_name)
  1. 备份文件写入数据
    3.1 打开源文件 和 备份文件
    3.2 将源文件数据写入备份文件
    3.3 关闭文件
# 3.1 打开文件
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')
# 3.2 将源文件数据写入备份文件
# 如果不确定目标文件大小,循环读取写入,当读取出来的数据没有了终止循环
while True:
    con = old_f.read(1024)
    if len(con) == 0:
        break
    new_f.write(con)
# 3.3 关闭文件
old_f.close()
new_f.close()


3.3 思考


如果用户输入.txt,这是一个无效文件,程序如何更改才能限制只有有效的文件名才能备份?


答:添加条件判断即可。

old_name = input('请输入您要备份的文件名:')
index = old_name.rfind('.')
if index > 0:
    postfix = old_name[index:]
new_name = old_name[:index] + '[备份]' + postfix
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')
while True:
    con = old_f.read(1024)
    if len(con) == 0:
        break
    new_f.write(con)
old_f.close()
new_f.close()


3.4 复制文件


小文件复制


  • 打开一个已有文件,读取完整内容,并写入到另外一个文件


# 1. 打开文件
file_read = open("README")
file_write = open("README[复件]", "w")
# 2. 读取并写入文件
text = file_read.read()
file_write.write(text)
# 3. 关闭文件
file_read.close()
file_write.close()

大文件复制

打开一个已有文件,逐行读取内容,并顺序写入到另外一个文件

# 1. 打开文件
file_read = open("README")
file_write = open("README[复件]", "w")
# 2. 读取并写入文件
while True:
    # 每次读取一行
    text = file_read.readline()
    # 判断是否读取到内容
    if not text:
        break
    file_write.write(text)
# 3. 关闭文件
file_read.close()
file_write.close()


四、文件和目录的管理操作


  • 终端/文件浏览器、 中可以执行常规的文件/目录管理操作,例如:
  • 创建、重命名、删除、改变路径、查看目录内容、……
  • Python 中,如果希望通过程序实现上述功能,需要导入 os 模块。具体步骤如下:


  1. 导入os模块


import os
• 1


  1. 使用os模块相关功能


os.函数名()


4.1 文件操作


序号 方法名 说明 示例
01 rename 重命名文件 os.rename(源文件名, 目标文件名)
02 remove 删除文件 os.remove(文件名)


4.2 目录(文件夹)操作


image.png


提示:文件或者目录操作都支持 相对路径绝对路径


# 需求:在aa里面创建bb文件夹: 1. 切换目录到aa,2创建bb
import os
os.chdir('aa')
os.mkdir('bb')


4.3 应用案例


需求:批量修改文件名,既可添加指定字符串,又能删除指定字符串。


  • 步骤
  1. 设置添加删除字符串的的标识
  2. 获取指定目录的所有文件
  3. 将原有文件名添加/删除指定字符串,构造新名字
  4. os.rename()重命名


  • 代码
import os
# 设置重命名标识:如果为1则添加指定字符,flag取值为2则删除指定字符
flag = 1
# 获取指定目录
dir_name = './'
# 获取指定目录的文件列表
file_list = os.listdir(dir_name)
# print(file_list)
# 遍历文件列表内的文件
for name in file_list:
    # 添加指定字符
    if flag == 1:
        new_name = 'Python-' + name
    # 删除指定字符
    elif flag == 2:
        num = len('Python-')     # 7
        new_name = name[num:]
    # 打印新文件名,测试程序正确性
    print(new_name)
    # 重命名
    os.rename(dir_name+name, dir_name+new_name)


五、总结


  • 文件操作步骤
  • 打开


文件对象 = open(目标文件, 访问模式)


操作


文件对象.read()
文件对象.readlines()
文件对象.readline()



文件对象.write()


  • seek()


  • 关闭


文件对象.close()


  • 主访问模式


  • w:写,文件不存在则新建该文件
  • r:读,文件不存在则报错
  • a:追加


  • 文件和文件夹操作


  • 重命名:os.rename()
  • 获取当前目录:os.getcwd()
  • 获取目录列表:os.listdir()
目录
相关文章
|
3月前
|
存储 Python
Python文件操作(1)
【10月更文挑战第17天】
Python文件操作(1)
|
20天前
|
计算机视觉 Python
如何使用Python将TS文件转换为MP4
本文介绍了如何使用Python和FFmpeg将TS文件转换为MP4文件。首先需要安装Python和FFmpeg,然后通过`subprocess`模块调用FFmpeg命令,实现文件格式的转换。代码示例展示了具体的操作步骤,包括检查文件存在性、构建FFmpeg命令和执行转换过程。
37 7
|
3月前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
548 60
|
3月前
|
数据采集 存储 Python
Python文件操作2
【10月更文挑战第18天】
Python文件操作2
|
3月前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
2月前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
86 2
|
3月前
|
Linux 区块链 Python
Python实用记录(十三):python脚本打包exe文件并运行
这篇文章介绍了如何使用PyInstaller将Python脚本打包成可执行文件(exe),并提供了详细的步骤和注意事项。
117 1
Python实用记录(十三):python脚本打包exe文件并运行
|
2月前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
|
3月前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
3月前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。