韩顺平 | 零基础快速学Python(16) 文件处理

2024-04-16 02:28

本文主要是介绍韩顺平 | 零基础快速学Python(16) 文件处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文件

输入与输出

输入:数据从数据源(文件)到程序(内存);
输出:数据从程序(内存)到数据源(文件)。

输出/写文件
输入/读文件
py程序(加载到内存)
文件(存放于磁盘)

I/O类型

Python用于处理各种I/O类型(Input/Output 类型),主要的I/O类型分别为:文件I/O,二进制I/O,对应处理的文件对象类别:文件文本、二进制文件
文件文本:通常是记事本可以直接打开的 .py .txt;
二进制文件:图片、音频、视频等。
不同类型文件需要用对应方式打开。

文件编码

文件编码/字符编码:规定了如何将内容翻译成二进制,以及如何将二进制翻译成可识别的内容。
常见编码:UTF-8(使用最多)、GBK、BIG5、GB2312、ANSI国标码(根据系统,中文简体对应GBK)
查看编码函数:hex(ord("字符")) 16进制转为10进制
编码转换工具

常见的文件操作

open(file, mode='r', encoding=None)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建文件

创建文件,以mode=“w”-写入形式打开文件,如果文件不存在,系统会自动创建。encoding不能少,因为和参数位置不对应,无法按参数位置传递。

f1 = open("d://a/hi.txt:", "w", encoding="utf-8)" #前提是目录存在
print(f"文件创建成功类型是:{type(f1)}") #<class '_io.TextIOWrapper'>

读文件

读取文件:mode=“r”-读取(默认)

 f = open("d://a/hi.txt:", "r", encoding="utf-8)# 读取方式1:read()content = f.read() # 一次返回整个文件的内容#content = f.read(6) #读取6个字符print(content)# 读取方式2:readline() 字符串末尾保留换行符\n
while True:line_content = f.readline # 循环读取整个文件 一行行读if line_content == "": #读取完毕breakprint(line_content, end="") #print不输出换行 # 读取方式3:readlines() 列表形式读取文件中所有行
lines = f.readlines()
for line in lines:print(line, end="")
print(lines) #["line1\n", "line2\n"...]# 读取方式4:直接遍历打开文件获取的文件对象
for line in f:print(line, end="")# 关闭文件,释放文件占用的系统资源
f.close() 

写文件

创建文件,以mode=“w”-写入形式打开文件,如果文件不存在,系统会自动创建;如果文件已存在,会先截断打开的文件,也就是清空文件内容(!!!)
· mode=“a”:追加写入

f1 = open("d://a/hi.txt:", "w", encoding="utf-8)" #前提是目录存在
i = 1
while i <= 10:f.write(f"hello, world!\n"))i += 1
f.close()

删除文件

import os
if os.path.exists("d://a/abc.txt") #判断指定路径文件是否存在os.remove("d://a/abc.txt") #如果存在,删除文件
else:print("不存在")

对目录的操作

import osif os.path.isdir("d://aaa") #判断目录是否存在print("已存在")
else:os.mkdir("d://aaa") # 创建单级目录if os.path.isdir("d://bbb//ccc")print("已存在")
else:os.makedirs("d://bbb//ccc") #递归创建多级目录if os.path.isdir("d://aaa") os.rmdir("d://aaa") # 删除单级目录
else:print("不存在")if os.path.isdir("d://bbb//ccc")os.removedirs("d://bbb//ccc") #删除多级目录
else:print("不存在")

获取文件的相关信息

import os
import time
#time.ctime() # 将返回的时间戳转为字符串格式
f_stat = os.stat("d:/python/hello.py") # 获取文件或文件描述符的状态,返回一个stst_result对象
print(f"文件大小->{time.ctime(f_stat.st_atime)} \n"f"最近访问时间->{time.ctime(f_stat.st_atime)} \n"f"最近修改时间->{time.ctime(f_stat.st_mtime)} \n"f"文件创建时间->{time.ctime(f_stat.st_ctime)} \n")

f.flush():刷新流的写入缓冲区到文件。
调用f.write()内容先积攒到缓存区,刷新后才真正写入文件,避免频繁操作硬盘,导致低效率
f.close:刷新并关闭流。
with open() as f:在处理文件对象时,子句体结束后,文件会自动关闭

with open("d://a//hello.txt", "r", encoding="UTF-8") as f:lines = f.readlines()for line in lines:print(line, end="")
print("\n文件是否关闭->", f.closed) #true

关于目录分隔符号:为兼容,推荐/
windows:/ //
linux/unix: /

应用实例

拷贝文件

使用原生方法 read() write()读取
1 打开源文件,读取文件的数据
2 打开目标文件,把读取的文件数据写入
3 注意:若二进制文件需以二进制方式打开

f_src_path = "C:/srcpath/pig.jpg"
f_dst_path = "d:/dstpath/pig.jpg"# 方式1
f_src = open(f_src_path, "rb") #r读取 b二进制文件 编码默认和系统保持一致
data = f_src.read()
f_dst = open(f_src_path, "wb")
f_dst.write(data)
f_src.close()
f_dst.close()#方式2 with子句方式完成文件拷贝 读一行写一行(文件大,减轻内存压力)
with open (f_src_path, "rb") as f_src:with open (f_dst_path, "wb") as f_dst:for data in f_src:f_dst.write(data)

遍历目录

判断是目录还是文件
1 获取文件夹(目录)所有内容(元素),所有文件和目录
2 判断是目录还是文件
3 化繁为简:先考虑单级目录,再考虑多级目录
3.1 如果是目录,输出信息再递归处理
3.2 如果是文件,输出对应信息即可

import os
dir_path = "d:/a"# 判断单级目录
content_list = os.listdir(dir_path) #列表形式返回目录内所有内容
print("content_list:", content_list)
for ele in content_list:child_ele = dir_path + "/" + eleif os.path.isdir(child_ele):print(f"目录:{child_ele}")else:print(f"文件:{child_ele}")# 递归遍历多级目录
def print_dir_all_content(dir_path):content_list = os.listdir(dir_path) for ele in content_list:child_ele = dir_path + "/" + eleif os.path.isdir(child_ele):print(f"目录:{child_ele}")print_dir_all_content(chile_ele) #递归操作else:print(f"文件:{child_ele}")

这篇关于韩顺平 | 零基础快速学Python(16) 文件处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907570

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.