python文件操作

文章目录

  • 一 文件的编码认识
  • 二 python文件操作
    • 2.1 open()打开函数
    • 2.2 mode常用的访问模式
    • 2.3 `open`函数的文件对象
    • 2.4 文件读操作
    • 2.5 练习案例:单词计数
  • 三 文件的写入
  • 四 操作综合案例
    • 4.1 需求
    • 4.2 实现思路
    • 4.3 参考代码1.0
    • 4.4 参考代码2.0

一 文件的编码认识

在这里插入图片描述

  • 文件编码是指将文本或数据转换为计算机可以理解和处理的二进制形式的过程。在计算机中,所有的数据都是以二进制形式存储和处理的,而文本数据也不例外。
  • 不同的字符集和语言有不同的编码方式,用于将字符映射到二进制数据。以下是一些常见的文件编码:
  1. ASCII(美国标准码):最早的字符编码之一,用于表示英文字母、数字和一些常用符号。它使用7位二进制数表示字符,共计128个字符。

  2. UTF-8(Unicode转换格式-8位):一种通用的字符编码,可以表示世界上几乎所有的字符,包括各种语言的文字和特殊符号。UTF-8使用可变长度的编码方式,一个字符可以占用1到4个字节。

  3. UTF-16(Unicode转换格式-16位):另一种Unicode编码方式,它使用16位二进制数表示字符,可以表示更多的字符,但在某些情况下会浪费存储空间。

  4. UTF-32(Unicode转换格式-32位):使用32位二进制数表示每个字符,能够表示更广泛的Unicode字符范围,但同样会浪费存储空间。

  5. ISO-8859系列:一系列字符编码,每个编码用于特定的字符集,如ISO-8859-1用于西欧语言字符,ISO-8859-5用于西里尔字母等。

  6. GB2312、GBK、GB18030:主要用于中文字符的编码,GB2312是早期的中文编码,GBK和GB18030对字符集进行了扩展,以支持更多的字符。

  7. Big5:用于繁体中文字符的编码,主要用于台湾和香港地区。

  • 在读写文件时,需要确保使用与文件编码一致的字符编码,以避免出现乱码或错误的情况。
  • 在编程中,常见的做法是使用UTF-8编码,因为它支持广泛的字符范围,适用于多种语言和场景。

二 python文件操作

  • 一般来说,文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别。
  • 操作系统以文件为单位管理磁盘中的数据。
  • 平常对文件的基本操作,大概可以分为三个步骤:
    ① 打开文件
    ② 读写文件
    ③ 关闭文件
  • 注意:可以只打开和关闭文件,不进行任何读写

2.1 open()打开函数

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明:

  • file:要打开的文件的路径。
  • mode:打开文件的模式,可以是 'r'(只读)、'w'(只写,如果文件已存在则覆盖)、'a'(追加)、'b'(二进制模式,如 'rb')、't'(文本模式,如 'rt')等。
  • buffering:缓冲设置,控制读写操作的缓冲行为。通常为 -1(系统默认缓冲方式)、0(无缓冲)、正整数(缓冲区大小)。
  • encoding:指定读写文件时使用的字符编码(仅在文本模式下有效)。
  • errors:指定在编解码错误时的处理方式。
  • newline:控制换行符的处理,可以是 None(使用系统默认)、''(不转换换行符)、'\n'(强制使用换行符)等。
  • closefd:如果为 True(默认),则关闭文件描述符。对于文件名、文件描述符和文件对象都有效。
  • opener:自定义打开文件的函数,通常不需要使用。

示例:

# 以只读模式打开文件
with open('example.txt', 'r') as file:content = file.read()print(content)# 以写入模式创建或覆盖文件
with open('output.txt', 'w') as file:file.write('Hello, World!')# 以追加模式打开文件
with open('log.txt', 'a') as file:file.write('New log entry')# 以二进制模式读取图片文件
with open('image.jpg', 'rb') as file:image_data = file.read()# 以文本模式读取文件,并指定字符编码
with open('data.txt', 'r', encoding='utf-8') as file:content = file.read()# 以写入模式打开文件,并指定字符编码为UTF-8
with open('output.txt', 'w', encoding='utf-8') as file:file.write('Hello, World!')# 以只读模式打开文件,并指定字符编码为UTF-8
with open('example.txt', 'r', encoding='utf-8') as file:content = file.read()print(content)
  • 注意:在使用 open() 打开文件后,务必在合适的地方使用 close() 方法关闭文件,或者更好的方式是使用 with 语句块,它会在退出代码块时自动关闭文件,避免资源泄露和错误。

2.2 mode常用的访问模式

  • 当使用Python的open()函数打开文件时,可以通过mode参数指定访问模式。
模式描述
'r'读取模式,打开文件进行读取。如果文件不存在,会引发错误。
'w'写入模式,打开文件进行写入。如果文件存在,会截断文件内容;如果文件不存在,会创建新文件。
'a'追加模式,打开文件进行写入,但不截断文件内容。如果文件不存在,会创建新文件。
'b'二进制模式,用于读取或写入二进制数据。可以与其他模式一起使用,如 'rb''wb'
't'文本模式,用于读取或写入文本数据(默认模式)。可以与其他模式一起使用,如 'rt''wt'
'x'独占创建模式,用于创建新文件,如果文件已经存在则引发错误。
'+'读写模式,可以同时读取和写入文件。可以与其他模式一起使用,如 'r+''w+'

2.3 open函数的文件对象

  • open() 函数返回一个文件对象,通过该对象可以对文件进行读写操作。文件对象提供了多个方法来读取和写入文件内容。
  1. read(size=-1):从文件中读取指定数量的字符(字节),如果未指定数量,则会读取整个文件内容。返回值是一个包含读取内容的字符串。

  2. readline():从文件中读取一行内容,包括行末换行符。返回值是一个字符串,如果到达文件末尾,则返回空字符串。

  3. readlines():从文件中读取所有行,将其存储在列表中,每一行是列表中的一个元素。

  4. write(string):将给定的字符串写入文件。返回值是写入的字符数。

  5. writelines(lines):将字符串列表写入文件,不添加额外的换行符。

  6. seek(offset, whence=0):移动文件指针到指定位置。offset 表示偏移量,whence 指定偏移相对位置(0表示文件开头,1表示当前位置,2表示文件末尾)。

  7. tell():返回当前文件指针的位置。

  8. close():关闭文件。在文件操作结束后应该调用这个方法以释放文件资源。

  9. flush():将缓冲区中的数据立即写入文件。

  10. __enter__()__exit__():用于支持 with 语句块,自动管理文件的打开和关闭。

示例使用:

with open('example.txt', 'r') as file:content = file.read()print(content)with open('output.txt', 'w') as file:file.write('Hello, World!')with open('data.txt', 'r') as file:for line in file:print(line)with open('lines.txt', 'w') as file:lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']file.writelines(lines)

2.4 文件读操作

  • 在Python中,可以使用文件对象的方法来进行文件读取操作。以下是一些常用的文件读取操作相关的方法:
  1. read(size=-1):从文件中读取指定数量的字符(字节),如果未指定数量,则会读取整个文件内容。返回一个包含读取内容的字符串。
with open('example.txt', 'r') as file:content = file.read()print(content)
  1. readline():从文件中读取一行内容,包括行末换行符。返回一个字符串,如果到达文件末尾,则返回空字符串。
with open('example.txt', 'r') as file:line = file.readline()print(line)
  1. readlines():从文件中读取所有行,将其存储在列表中,每一行是列表中的一个元素。
with open('example.txt', 'r') as file:lines = file.readlines()for line in lines:print(line)
  1. 迭代文件对象:文件对象本身也是可迭代的,可以在循环中逐行读取文件内容。
with open('example.txt', 'r') as file:for line in file:print(line)
  • 注意:文件的读取操作可能会引发异常,特别是当文件不存在或权限不足时。因此,在进行文件读取操作时,最好使用异常处理来捕获潜在的问题。

2.5 练习案例:单词计数

  • 通过Windows的文本编辑器软件,将如下内容,复制并保存到:word.txt,文件可以存储在任意位置
itheima itcast python
itheima python itcast
beijing shanghai itheima
shenzhen guangzhou itheima
wuhan hangzhou itheima
zhengzhou bigdata itheima
  • 通过文件读取操作,读取此文件,统计itheima单词出现的次数

# 打开文件,以读取模式打开
f = open("D:/word.txt", "r", encoding="UTF-8")
# 方式1:读取全部内容,通过字符串count方法统计itheima单词数量content = f.read()count = content.count("itheima")print(f"itheima在文件中出现了:{count}次")
# 方式2:读取内容,一行一行读取
count = 0       # 使用count变量来累计itheima出现的次数
for line in f:line = line.strip()     # 去除开头和结尾的空格以及换行符words = line.split(" ")for word in words:if word == "itheima":count += 1      # 如果单词是itheima,进行数量的累加加1
# 判断单词出现次数并累计
print(f"itheima出现的次数是:{count}")
# 关闭文件
f.close()

三 文件的写入

  • 以下是一些常用的文件写入操作方法:
    • 文件如果不存在,使用”w”模式,会创建新文件
    • 文件如果存在,使用”w”模式,会将原有内容清空
  1. write(string):将给定的字符串写入文件,返回值是写入的字符数。

    with open('output.txt', 'w') as file:file.write('Hello, World!')
    
  2. writelines(lines):将字符串列表写入文件,不添加额外的换行符。

    lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
    with open('lines.txt', 'w') as file:file.writelines(lines)
    
  3. 文件迭代器写入:通过循环将内容逐行写入文件。

    lines = ['Line 1', 'Line 2', 'Line 3']
    with open('lines.txt', 'w') as file:for line in lines:file.write(line + '\n')
    
  4. flush():将缓冲区中的数据立即写入文件。

    with open('output.txt', 'w') as file:file.write('Hello')file.flush()  # 立即将数据写入文件
    
  5. 追加模式:使用'a'模式来追加内容到文件而不覆盖已有内容。

    with open('log.txt', 'a') as file:file.write('New log entry')
    
    • a模式,文件不存在会创建文件
    • a模式,文件存在会在最后,追加写入文件
  • 在使用 with 语句块的情况下,通常不需要显式地调用 flush() 方法,因为 with 块结束时会自动执行必要的刷新操作。只有在需要强制刷新缓冲区的特殊情况下才需要使用 flush() 方法。

  • 在使用完毕后,记得关闭文件以释放资源,最好的做法是使用 with 语句块。

  • 文件的写入操作也可能会引发异常,特别是当文件无法写入或权限不足时。在进行文件写入操作时,最好使用异常处理来捕获潜在的问题。

四 操作综合案例

  • 有一份账单文件,记录了消费收入的具体记录,可以将内容复制并保存为 bill.txt文件,内容如下:
    name,date,money,type,remarks
    周杰轮,2022-01-01,100000,消费,正式
    周杰轮,2022-01-02,300000,收入,正式
    周杰轮,2022-01-03,100000,消费,测试
    林俊节,2022-01-01,300000,收入,正式
    林俊节,2022-01-02,100000,消费,测试
    林俊节,2022-01-03,100000,消费,正式
    林俊节,2022-01-04,100000,消费,测试
    林俊节,2022-01-05,500000,收入,正式
    张学油,2022-01-01,100000,消费,正式
    张学油,2022-01-02,500000,收入,正式
    张学油,2022-01-03,900000,收入,测试
    王力鸿,2022-01-01,500000,消费,正式
    王力鸿,2022-01-02,300000,消费,测试
    王力鸿,2022-01-03,950000,收入,正式
    刘德滑,2022-01-01,300000,消费,测试
    刘德滑,2022-01-02,100000,消费,正式
    刘德滑,2022-01-03,300000,消费,正式
    

4.1 需求

  • 读取文件
  • 将文件写出到bill.txt.bak文件作为备份
  • 同时,将文件内标记为测试的数据行丢弃

4.2 实现思路

  • open和r模式打开一个文件对象,并读取文件
  • open和w模式打开另一个文件对象,用于文件写出
  • for循环内容,判断是否是测试不是测试就write写出,是测试就continue跳过

4.3 参考代码1.0


source_file = "C:/Users/HP/Desktop/bill.txt"
target_file = "C:/Users/HP/Desktop/bill.txt.bak"
# 打开源文件进行读取,并创建目标文件进行写入
with open(source_file, "r", encoding="UTF-8") as fr, open(target_file, "w", encoding="UTF-8") as fw:# for循环读取文件for line in fr:line = line.strip()# 判断内容,将满足的内容写出if line.split(",")[4] == "测试":continue        # continue进入下一次循环,这一次后面的内容就跳过了# 将内容写出去fw.write(line)# 由于前面对内容进行了strip()的操作,所以要手动的写出换行符fw.write("\n")

4.4 参考代码2.0


source_file = "C:/Users/HP/Desktop/bill.txt"
target_file = "C:/Users/HP/Desktop/bill.txt.bak"
# 打开源文件进行读取,并创建目标文件进行写入
with open(source_file, "r", encoding="UTF-8") as fr, open(target_file, "w", encoding="UTF-8") as fw:for line in fr:if "测试" in line:continuefw.write(line)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分享windwosServer2012R--ISO镜像下载地址(含激活教程)

windowsServer2012R----急速网盘下载地址:点击下载 提取码:888999 激活下载:点击下载 提取码:888999

ElasticSearch 7.4学习记录(基础概念和基础操作)

若你之前从未了解过ES,本文将由浅入深的一步步带你理解ES,简单使用ES。作者本人就是此状态,通过学习和梳理,产出本文,已对ES有个全面的了解和想法,不仅将知识点梳理,也涉及到自己的理解&#xf…

Java事件监听机制

这里写目录标题 先进行专栏介绍再插一句 开始喽事件监听机制分析观察者模式观察者模式由以下几个角色组成:观察者模式的工作流程如下:观察者模式的优点包括:观察者模式适用于以下场景:总结 事件监听机制的工作流程如下&#xff1a…

喆啡酒店十周年丨啡越时间限,ALL BY 10VE!

啡越时光热爱为伴 十年前,秉持对咖啡馆文化及复古风格的喜爱,喆啡酒店创造全新的Coffetel品类,将充满「温暖」「愉悦」「咖啡香」的格调体验带给消费者,成为无数人「旅途中的啡凡存在」。 十年间,喆啡酒店以热爱化为…

【深度学习】SMILEtrack: SiMIlarity LEarning for Multiple Object Tracking,论文

论文:https://arxiv.org/abs/2211.08824 代码:https://github.com/WWangYuHsiang/SMILEtrack 文章目录 AbstractIntroductionRelated WorkTracking-by-DetectionDetection methodData association method Tracking-by-Attention Methodology架构概述外观…

【vue3】基础知识点-setup语法糖

学习vue3&#xff0c;都会从基础知识点学起。了解setup函数&#xff0c;ref&#xff0c;recative&#xff0c;watch、comptued、pinia等如何使用 今天说vue3组合式api&#xff0c;setup函数 在学习过程中一开始接触到的是这样的&#xff0c;定义数据且都要通过return返回 <…

[保研/考研机试] KY102 计算表达式 上海交通大学复试上机题 C++实现

描述 对于一个不存在括号的表达式进行计算 输入描述&#xff1a; 存在多组数据&#xff0c;每组数据一行&#xff0c;表达式不存在空格 输出描述&#xff1a; 输出结果 示例1 输入&#xff1a; 6/233*4输出&#xff1a; 18思路&#xff1a; ①设立运算符和运算数两个…

Windows环境下通过 系统定时 执行脚本方式 压缩并备份文件夹 到其他数据盘

环境配置 压缩时需要使用7-zip进行调用&#xff0c;因此根据自己电脑进行安装 官网&#xff1a;https://www.7-zip.org/ 脚本文件 新建记事本文件&#xff0c;重命名为git_back_up.bat echo off rem 设置utf-8可以正常显示中文 chcp 65001 > nulrem 获取当前日期和时间&…

使用动态规划实现错排问题-2023年全国青少年信息素养大赛Python复赛真题精选

[导读]&#xff1a;超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲&#xff0c;这是超平老师解读Python编程挑战赛真题系列的第15讲。 全国青少年信息素养大赛&#xff08;原全国青少年电子信息智能创新大赛&#xff09;是“世界机器人大会青少年机器人设…

大数据Flink(五十七):Yarn集群环境(生产推荐)

文章目录 Yarn集群环境(生产推荐) 一、准备工作

Clickhouse 存储引擎

一、常用存储引擎分类 1.1 ReplacingMergeTree 这个引擎是在 MergeTree 的基础上&#xff0c;添加了”处理重复数据”的功能&#xff0c;该引擎和MergeTree的不同之处在于它会删除具有相同主键的重复项。 特点: 1使用ORDERBY排序键作为判断重复的唯一键 2.数据的去重只会在合并…

Openlayers实战:使几何图形适配窗口

Openlayers开发的项目中,有一种应用非常重要,就是绘制或者显示出几何图形后,让几何图形居中并适配到窗口下,这样能让用户很好的聚焦到所要看的内容中去。 这里使用了fit的这个view 的方法,具体的操作请参考示例源代码。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozh…

apple pencil二代值不值得买?好用的苹果平替笔推荐

自从苹果的Pencil系列问世以来&#xff0c;在国内电容笔市场的销量大增&#xff0c;而苹果的Pencil系列&#xff0c;其的售价更是贵的让人望而却步。现在市面上有很多平替的电容笔&#xff0c;都能取代苹果的Pencil&#xff0c;用来做笔记、做批注、写写字都绰绰有余了。在这里…

【状态估计】一维粒子滤波研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

记录线上一次mysql只能查询,不能插入或更新的bug

错误复现 突然有一天产品通知xx服务不可用&#xff0c;想着最近也没有服务更新&#xff0c;就先排查一下服务日志 使用postman测试的时候请求明显超时&#xff0c;查看日志显示是一个锁的问题 使用工具连接到mysql&#xff0c;查看information_schema.INNODB_TRX,发现有一个事…

边写代码边学习之RNN

1. 什么是 RNN 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种以序列数据为输入来进行建模的深度学习模型&#xff0c;它是 NLP 中最常用的模型。其结构如下图&#xff1a; x是输入&#xff0c;h是隐层单元&#xff0c;o为输出&#xff…

Promise详细版

promise基础原理到难点分析 常见的Promise的方法解读 扩展async和await深入分析 逐步分析Promise底层逻辑代码 一、Promise基础 1.什么是promise 为了解决回调地狱&#xff1a; //2.设置点击事件btn.onclick function() {//3.创建ajax实例化对象let xhr new XMLHttpRe…

appium自动爬取数据

爬取类容&#xff1a;推荐知识点中所有的题目 爬取方式&#xff1a;appium模拟操作获取前端数据 入门级简单实现&#xff0c;针对题目和答案是文字内容的没有提取出来 适用场景;数据不多&#xff0c;参数加密&#xff0c;反爬严格等场景 from appium import webdriver impor…

策略模式——算法的封装与切换

1、简介 1.1、概述 在软件开发中&#xff0c;常常会遇到这种情况&#xff0c;实现某一个功能有多条途径。每一条途径对应一种算法&#xff0c;此时可以使用一种设计模式来实现灵活地选择解决途径&#xff0c;也能够方便地增加新的解决途径。为了适应算法灵活性而产生的设计模…

【工程优化问题】基于多种智能优化算法的压力容器设计问题研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…