韩顺平 | 零基础快速学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 == "": #读取完毕
		break
	print(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 os

if 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 + "/" + ele
	if 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 + "/" + ele
		if os.path.isdir(child_ele):
			print(f"目录:{child_ele}")
			print_dir_all_content(chile_ele) #递归操作
		else:
			print(f"文件:{child_ele}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/546609.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

五、LoadBalancer负载均衡服务调用

一、Ribbon目前也进入维护模式 1、是什么 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说&#xff0c;Ribbon是Netflix发布的开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的…

掌握CRM+邮箱技巧:销售速度与客户信任双丰收

在千行百业都在谈提效的今天&#xff0c;如果您的销售团队效率较低&#xff0c;恐怕很难过好2024。销售团队提效是个大话题&#xff0c;总的说来就是销售团队需要在正确的时间做正确的事。如何做到&#xff1f;自然要借助CRM工具。过去我们也讲了不少CRM如何辅助销售团队提效的…

Playwright已经是目前最好的测试自动化工具了吗?

作者观点&#xff1a;很长时间以来&#xff0c;Selenium是QA工程师寻求测试自动化解决方案的首选测试框架。它能够测试任何浏览器&#xff08;这在IE浏览器的统治时期尤其重要&#xff09;和任何平台。然而&#xff0c;现在看来&#xff0c;那个时代已经过去了。 今天&#xf…

Python机器学习实战教程

一、引言 机器学习是人工智能的一个子集&#xff0c;它使用算法来让计算机系统从数据中“学习”并改进其性能&#xff0c;而无需进行明确的编程。Python因其易于学习、强大的库和广泛的应用场景&#xff0c;成为了机器学习的首选语言。本教程旨在帮助读者从零开始学习Python机…

APP开发突增20倍!安卓和鸿蒙你站哪边?

随着科技的快速发展&#xff0c;智能设备已经成为我们生活中不可或缺的一部分。 根据不少业内人士爆料&#xff0c;今年9月华为将发布mate70系列&#xff0c;而同时华为自己也官宣了"鸿蒙星河版"&#xff0c;也就是原生鸿蒙系统&#xff0c;将于今年4季度商用。这很…

31、链表-K个一组反转链表

思路&#xff1a; 首先知道如何反转链表&#xff0c;其次找出每组的开始节点和结束节点&#xff0c;然后对于不足与k个的链表保持原状。 代码如下&#xff1a; class Solution {public ListNode reverseKGroup(ListNode head, int k) {if (headnull||k1){return head;}ListN…

家居网购项目(Ajax验证用户名+上传图片)

文章目录 1.Ajax验证用户名1.程序框架图2.修改MemberServlet3.修改login.jsp4.结果展示 2.Ajax判断验证码是否输入正确1.修改MemberServlet2.修改login.jsp3.结果展示 3.Ajax添加购物车1.程序框架图2.修改CartServlet2.修改index.jsp3.解决问题—未登录直接添加购物车&#xff…

每日一题---OJ题: 有效的括号

片头 嗨! 小伙伴们,大家好! 我们又见面啦! 今天我们来一起尝试一下这道题目---有效的括号,准备好了吗? 我们开始咯! 说实话,我刚开始做这道题的时候也是一脸懵,怎么进行括号匹配呢? 别慌,我们一起画个图,分析分析括号匹配的过程~ 如下图所示,上方表示一个字符串数组,存放不…

【C++】力扣OJ题:找出只出现一次的数字

Hello everybody!这是我第一次写关于OJ题目的博客&#xff0c;因为正好学到完了C的STL库&#xff0c;就顺手刷了一些OJ题。 我今天要介绍的题目虽然是力扣上的简单题&#xff0c;但思想很巧妙&#xff0c;我觉得有必要和大家分享一下&#xff01; 1.题目 2.代码 class Solut…

【Go】原子并发操作

目录 一、基本概念 支持的数据类型 主要函数 使用场景 二、基础代码实例 开协程给原子变量做加法 统计多个变量 原子标志判断 三、并发日志记录器 四、并发计数器与性能监控 五、优雅的停止并发任务 worker函数 Main函数 应用价值 Go语言中&#xff0c;原子并发操…

飞机飞行数据三维可视化管控系统更智能、精准

近年来&#xff0c;随着无人化工厂和智能工厂在中国大量涌现&#xff0c;基于成熟的数字孪生理念&#xff0c;智能工厂三维可视化虚拟管控系统引领未来工业革命的先锋。数字孪生公司深圳华锐视点结合前沿的三维仿真、GIS和三维可视化技术技术&#xff0c;深度集成工厂生产、经营…

鸿蒙 Failed :entry:default@CompileResource...

Failed :entry:defaultCompileResource... media 文件夹下有文件夹或者图片名称包含中文字符 rawfile 文件夹下文件名称、图片名称不能包含中文字符

IGBT退饱和现象解析与防范

IGBT是一种重要的功率半导体器件&#xff0c;广泛应用于电力电子领域&#xff0c;如变频器、电动机驱动、电力传输等。在这些应用中&#xff0c;IGBT的导通和关断特性至关重要&#xff0c;而退饱和是IGBT工作过程中的一个重要现象。 IGBT的退饱和定义 退饱和是指IGBT在导通状态…

软件测试面试题分享(含答案+文档)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 准备找工作的小伙伴们&#xff0c;今天我给大家带来了一些自动化测试面试题&#xff0c;在这个公…

NLP vs. LLMs: 理解它们之间的区别

作者&#xff1a;Elastic Platform Team 随着人工智能持续发展并在无数行业解决问题&#xff0c;技术的一个关键部分是能够无缝地桥接人类语言和机器理解之间的差距。这就是自然语言处理&#xff08;NLP&#xff09;和大型语言模型&#xff08;LLMs&#xff09;的用武之地。它们…

运用OSI模型提升排错能力

1. OSI模型有什么实际的应用价值&#xff1f; 2. 二层和三层网络的区别和应用&#xff1b; 3. 如何通过OSI模型提升组网排错能力&#xff1f; -- OSI - 开放式系统互联 - 一个互联标准 - 从软件和硬件 定义标准 - 不同厂商的设备 研发的技术 - 具备兼容性 -- O…

Python基于flask的豆瓣电影分析可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

初识集合框架

前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; hellohello~&#xff0c;大家好&#x1f495;&#x1f495;&#xff0c;这里是E绵绵呀✋✋ &#xff0c;如果觉得这篇文章还不错的话还请点赞❤️❤️收藏&#x1f49e; &#x1f49e; 关注&#x1f4a5;&#x1f…

机器视觉图像采集卡及其接口概述

本文主要是介绍机器视觉图像采集卡及其使用的各种接口。 首先&#xff0c;我们将概述外围计算机卡&#xff0c;然后探索图像采集卡中使用的不同类型的机器视觉接口。 我们先来说一个常见的问题&#xff1a;什么是电脑外设卡&#xff0c;如何分类&#xff1f; 用于机器视觉的…

GIS 数据格式转换

1、在线工具 mapshaper 2、数据上传 3、数据格式转换 导入数据可导出为多种格式&#xff1a;Shapefile、Json、GeoJson、CSV、TopJSON、KML、SVG