python文件IO基础知识

目录

1.open函数打开文件

2.文件对象读写数据和关闭

3.文本文件和二进制文件的区别

4.编码和解码

读写文本文件时

读写二进制文件时

5.文件指针位置

6.文件缓存区与flush()方法


1.open函数打开文件

使用 open 函数创建一个文件对象,read 方法来读取数据,write 方法来写数据
语法:fileObject = open(filename, mode)
filename文件路径
mode取值:
  • "r":为了读打开一个文件
  • "w":为了写打开一个文件,如果文件已经存在则覆盖
  • "a":为了写打开一个文件,从文件末尾追加写入
  • "rb":为读取二进制数据打开文件
  • "wb":为写入二进制数据打开文件
  • "ab":追加写入二进制数据
file1 = open("scores.txt", "r")

# 在 filename 前加上 r 表示将反斜线\看做普通的字符,使其没有其他功能
file2 = open(r"c:\pybook\scores.txt", "r")  

# 如果没有 r 前缀,使用转义序列
file3 = open("c:\\pybook\\scores.txt", "r")  

2.文件对象读写数据和关闭

open函数创建了一个文件对象,这是_io.TextIOWrapper类的一个实例。这个类包含了读写数据和文件关闭的方法。

特别说明:

  • readline()是读取当前行中还未读取的内容,返回字符串。这个行指以换行符\n 结尾之前的内容
  • readlines()是读取剩下所有未读取的内容,返回列表,列表的每一个元素时每行未读取的字符串
  • print 函数会自动插入换行符\n,而 write 方法需要显式地添加一个换行符号\n 用来换行写数据
  • close方法必须被调用,特别是写文件时,忘记close可能导致文件内容无法写入
def main():
    outfile = open("Presidents.txt", "w")
    outfile.write("QingHui\t")
    outfile.write("ZhangSan\n")
    outfile.write("XiaoWang\t")
    outfile.write("DaBing\n")
    outfile.write("Others")
    outfile.close()

    file2 = open("Presidents.txt", "r")
    string1 = file2.read(10)
    print(string1)  # QingHui	Zh

    string3 = file2.readline()
    print(string3)  # angSan

    string4 = file2.readlines()  # ['XiaoWang\tDaBing\n', 'Others']
    print(string4)
    file2.close()


main()

按行读取文件全部数据

# 法一
infile = open("Presidents.txt", "r")
all_data = []
line = infile.readline()
while line != '':
    all_data.append(line)
    line = infile.readline()
print(all_data)

# 法二
infile = open("Presidents.txt", "r")
all_data = []
for line in infile:
    all_data.append(line)
print(all_data)

"""
['QingHui\tZhangSan\n', 'XiaoWang\tDaBing\n', 'Others\n', '\n', '\n']
['QingHui\tZhangSan\n', 'XiaoWang\tDaBing\n', 'Others\n', '\n', '\n']
"""

简洁读写文件

with open(参数) as file, 自动关闭文件
filepath = r"D:\test\1.txt"

with open(filepath, "r") as file:
    for line in file:
        print(line, end="")
    print()

with open(filepath, "rb") as file:
    for line in file:
        line = line.decode("gbk", "ignore")
        print(line, end="")
    print()
读写数值数据
由于文本文件中的数据都是字符串类型,所以在进行数值数据的读写的时候都要进行相应的数据类型转换。为了正确地读出文件中的数字,利用” ”或者\n 的空白符来分隔数字。复杂一点的需要使用正则表达式。
from random import randint


def main():
    outfile = open("Numbers.txt", "w")
    for i in range(100):
        outfile.write(str(randint(0, 9)) + " ")
    outfile.close()

    infile = open("Numbers.txt", "r")
    s = infile.read()
    numbers = [eval(x) for x in s.split()]
    for number in numbers:
        print(number, end = " ")
    infile.close()


main()

3.文本文件和二进制文件的区别

【c基础】文件操作-CSDN博客

参考这篇文章中《2.文本文件与二进制文件的区别》

4.编码和解码

读写文本文件时

  • 编码就是将文本模式变成二进制模式。在向一个文本文件写入指定内容时,会将文本内容按指定编码类型编码为二进制,然后放在文件中。
  • 解码就是二进制模式变为文本模式。在从一个文本文件读取内容时,会将读取到的二进制内容按指定编码类型解码为字符串
打开文件时,如果不指定编码方式,则默认utf-8,不过也可以使用encoding参数指定编码方式。
注意写入文件时用什么编码方式,读取时也最好用什么编码方式,这样保证内容能正确读取到,否则会出现UnicodeDecodeError或者乱码。
w_file = open("data.txt", "w", encoding="gbk")
w_file.write("你好中国")
w_file.close()

# 当用不同的编码方式读取文件内容时会报错或者出现乱码
r_file = open("data.txt", "r", encoding="utf-8")
for line in r_file:
    print(line)
r_file.close()

"""
会报错:UnicodeDecodeError: 
'utf-8' codec can't decode byte 0xc4 in position 0: invalid continuation byte
"""

如何手动查看文本文件的编码方式

如何手动修改文本文件的编码方式:文件另存为时设置

读写二进制文件时

读写二进制文件时,在用open函数创建文件对象,不能使用encoding函数,否则会"ValueError: binary mode doesn't take an encoding argument"。而是在write函数前对需要写入的字符串内容进行encode,或者在read读到的内容后进行decode。
# 写入数据
file = open("data.txt", "wb")
data = "hello 中国"   # 字符串内容
file.write(data.encode("utf-8"))  # 将字符串内容按utf-8编码为二进制写入到文件中
# 这个时候去查看"data.txt"的编码就可以看到是 utf-8 编码了
file.close()


# 读取数据
file = open("data.txt", "rb")
txt = file.read().decode("utf-8")
print(type(txt))  # <class 'str'>
print(txt)   # hello 中国
file.close()

5.文件指针位置

在创建文件时,文件指针位置在起始位置,在第 0 行的前面。每次读或写时,文件指针位置都会前移。

可以使用seek主动调整文件指针位置。

  • seek(arg1, arg2) 第一个参数是偏移量,第二个参数表示模式,0 表示开头,1 为中间,2 为末尾
  • file.seek(16, 0) 表示指针从开头的第 16 个字符起开始
  • file.seek(0, 0) 文件指针跳转到开头

tell 方法获取文件指针当前的位置

file = open("data.txt", "w")
file.write("1234567\n")
file.write("89\n")
file.write("xyz\n")
file.close()


file = open("data.txt", "r")
print(f"index={file.tell()}\n")  # 1

for i in range(12):
    ret = file.read(1)
    print(f"value=({ret})")  # 1
    print(f"index={file.tell()}\n")  # 1

file.close()

运行结果

index=0

value=(1)
index=1

value=(2)
index=2

value=(3)
index=3

value=(4)
index=4

value=(5)
index=5

value=(6)
index=6

value=(7)
index=18446744073709551624

value=(
)
index=9

value=(8)
index=10

value=(9)
index=18446744073709551628

value=(
)
index=13

value=(x)
index=14

注意在换行符号"\n"处,文件指针跳动了两个单位,是因为windows下"\n"会自动变成"\r\n"。

6.文件缓存区与flush()方法

write 是写入内存的缓冲区,没有实时写入
等到 file.close()后再集中处理,或者缓冲区满了就真正写入
缓冲区的作用:磁盘是有寿命的,读取 or 写入一次寿命就会减少
import time

file = open("data.txt", "w")
file.write("abcdefg")

file.flush()  # 刷新,实时写入
# 此时查看data.txt中会有数据"abcdefg",否则会等到file.close() 才有数据
# 有了这个语句就不怕忘记写 file.close()这个了

time.sleep(30)
file.close()  # 文件是在文件关闭后才能写入,很重要

end

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

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

相关文章

CentOS7 部署单机版 ElasticSearch + Logstash

一、部署ElasticSearch Elasticsearch部署参考下面文章&#xff1a; CentOS7 部署单机版 elasticsearch-CSDN博客文章浏览阅读285次&#xff0c;点赞6次&#xff0c;收藏3次。ElasticSearch&#xff0c;用于检索、聚合分析和大数据存储https://blog.csdn.net/weixin_44295677…

定个小目标之每天刷LeetCode热题(1)

有两种解决方法&#xff1a; 第一种&#xff1a;利用哈希集合不重复的特性&#xff0c;代码展示如下 public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {Set<ListNode> listNode new HashSet<ListNode>();ListNode…

一招搞定!家里灰尘多?教你如何轻松清理,推荐必备神器

在现代生活中&#xff0c;灰尘无处不在&#xff0c;特别是在大城市&#xff0c;空气中的污染物更多&#xff0c;导致家里的灰尘积聚速度加快。保持家居环境的干净和整洁不仅能提升生活质量&#xff0c;还能保护我们的健康。作为一名家电博主将为你提供详细的家里灰尘清理方法&a…

EtherCAT运动控制器在UVW对位平台中的应用

ZMC406硬件介绍 ZMC406是正运动推出的一款多轴高性能EtherCAT总线运动控制器&#xff0c;具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口&#xff0c;ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。 ZMC406支持6轴运动控制&#xff0c;最多可扩展至32轴&#…

Taro React组件开发 —— RuiVerifySlider 行为验证码之滑动拼图

1. 效果预览 2. 使用场景 账号登录,比如验证码发送,防止无限调用发送接口,所以在发送之前,需要行为验证! 3. 插件选择 AJ-Captcha行为验证码文档AJ-Captcha行为验证码代码仓库为什么要选用【AJ-Captcha行为验证码】呢?因为我们管理后台使用的是 pigx ,它在后端采用的是【…

双盲插技术引领行业变革:USB-C便携显示器新篇章

USB TYPE-C接口显示器技术解析&#xff1a;LDR6282芯片与双盲插全功能方案 随着USB TYPE-C接口技术的普及和USB4标准的推出&#xff0c;传统HDMI和DisplayPort接口的地位正逐渐受到挑战。USB TYPE-C接口以其小巧、高速、多功能的特性&#xff0c;正逐步成为显示器和电视机接口…

IDEC和泉触摸屏维修显示屏HG1G-4VT22TF-S

IDEC触摸屏维修故障有&#xff1a;黑屏、花屏、按触摸屏无反应或反应慢、内容错乱、进不了系统界面、无背光、背光暗、有背光无字符、不能通信、按键无反应等。 和泉IDEC触摸屏维修常见型号&#xff1a;HG2A-SS22CF、HG2F-SS22VF 、HG2F-SS52VF、HG3F-FT22TF-B、HG3F-FT22TF-W、…

探索数据结构:单链表的实践和应用

&#x1f511;&#x1f511;博客主页&#xff1a;阿客不是客 &#x1f353;&#x1f353;系列专栏&#xff1a;渐入佳境之数据结构与算法 欢迎来到泊舟小课堂 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ​ 一、前言 前面我们学习了数据结构中的顺序表&…

前端JS必用工具【js-tool-big-box】学习,获取全球重点城市时间

我们去住一些旅馆的时候&#xff0c;或者一些国际性网站&#xff0c;经常可以看见他们的钟表会展示一些国家地区的时间&#xff0c;这个就是很常用的功能。但如果不常接触这个功能的开发网站呢&#xff0c;大家就看自己电脑右下角的时间展示&#xff0c;就是自己当前的具体时间…

2024年【G2电站锅炉司炉】免费试题及G2电站锅炉司炉复审考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【G2电站锅炉司炉】免费试题及G2电站锅炉司炉复审考试&#xff0c;包含G2电站锅炉司炉免费试题答案和解析及G2电站锅炉司炉复审考试练习。安全生产模拟考试一点通结合国家G2电站锅炉司炉考试最新大纲及G2电站锅…

新手必看!TikTok视频0播放的5大原因及解决方法

很多刚起步的TikTok卖家常会遇到一个烦心事&#xff1a;发布的视频播放量少得可怜&#xff0c;甚至有时是0播放。这确实让人挺沮丧的。到底如何突破TikTok视频总是播放量为0的瓶颈&#xff1f;别担心&#xff0c;今天为大家总结了tiktok视频播放量上不去的5种原因和相应的解决方…

以JVM新特性看Java的进化之路:从Loom到Amber的技术篇章

引言&#xff1a; JVM的最新特性通过在效率、功能和易用性方面的创新&#xff0c;对Java的未来发展产生了深远的影响。以下是几个关键特性如何塑造了Java的未来&#xff1a; 正文&#xff1a; 轻量级并发 - 项目Loom&#xff1a; 项目Loom通过引入虚拟线程&#xff08;也被称为…

使用vue,mybatis,mysql,tomcat,axios实现简单的登录注册功能

目录 第一步环境搭建 后端&#xff1a; 前端&#xff1a; 第二步画流程图 web: service: dao层&#xff1a; 第三步前端代码的实现 这是开始的页面&#xff0c;接下来我们要到router路由下书写#login的路径 路由中的component在我们自己创建的views书写vue文件…

某安全厂商外包安服工程师面试

写在前面&#xff1a;本篇帖子出现的厂商and面试问题皆为up实际面试情况&#xff0c;厂商信息不透露&#xff0c;仅供师傅们参考。 背景 某知名安全厂商外包 岗位&#xff1a;安全服务工程师&#xff08;偏售后&#xff09; 薪资条件&#xff1a;7~9k&#xff08;up所在二线…

Moto和Inter字节序

inter: 低地址按照start_bit位放低字节依次往高字节填充 MotoLsb: 低地址按照start_bit位放高字节&#xff0c;依次往低字节填充MotoMsb&#xff1a;高字节按照start_bit位放低地址&#xff0c;依次往高字节填充

光纤跳纤,这篇文章值得一看

光纤跳线作为光网络布线最基础的元件之一&#xff0c;被广泛应用于光纤链路的搭建中。 如今&#xff0c;光纤制造商根据应用场景的不同推出众多类型的光纤跳线&#xff0c;如 MPO / LC / SC / FC / ST 光纤跳线&#xff0c;单工/双工光纤跳线&#xff0c;单模/多模光纤跳线等&…

一文带你学会如何部署个人博客到云服务器,并进行域名备案与解析!

哈喽&#xff0c;大家好呀&#xff01;这里是码农后端。之前我给大家介绍了如何快速注册一个自己的域名&#xff0c;并创建一台自己的阿里云ECS云服务器。本篇将介绍如何将个人博客部署到云服务器&#xff0c;并进行域名备案与解析。 1、域名备案 注册了域名并购买了云服务器之…

bootstrap实现天平效果

之前提到了&#xff0c;最近&#xff0c;孩子的幼儿园让家长体验“半日助教活动”&#xff0c;每个家长需要讲授15-20分钟的课程。作为一名程序员&#xff0c;实在没有能教的课程&#xff0c;只能做了一个小游戏&#xff0c;带着小朋友们熟悉数字。 在上一章博客中&#xff0c…

探索AI变现新模式:搭建小程序,畅享换脸写真、趣测音乐多重乐趣

一、AI创作系统介绍、 AI变现小程序是一种利用人工智能技术为用户提供服务&#xff0c;并通过某种方式实现盈利的小程序。这种小程序可以应用于多个领域&#xff0c;如AI动漫推文、AI绘画、AI换脸等。 AI小说生动漫推文&#xff1a;是一种利用AI技术和动漫制作技术&#xff0…

苹果WWDC 2024或将推出AI生成的表情符号并宣布与OpenAI的合作|TodayAI

苹果正在为即将到来的WWDC&#xff08;全球开发者大会&#xff09;做准备&#xff0c;并将展示其生成式AI技术。根据Mark Gurman在Bloomberg的《Power On》通讯中的报道&#xff0c;苹果将在2024年的WWDC上讲述自己的AI故事&#xff0c;但这可能不会像Google、Microsoft或OpenA…