【python基础语法四】python对文件的操作

这篇具有很好参考价值的文章主要介绍了【python基础语法四】python对文件的操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文件操作

文件的读写操作

"""
语法:
fp = open(文件,模式,编码集)
fp => 文件的io对象 (文件句柄)
i => input  输入
o => outpur 输出

fp.read()  读取文件内容
fp.write() 写入文件的内容
"""
# 1.文件的写入操作
# (1) 打开文件
fp = open("ceshi1.txt",mode="w",encoding="utf-8")# 打开冰箱门
# (2) 写入内容
fp.write("把大象怼进去") # 把大象怼进去
# (3) 关闭文件
fp.close() # 把冰箱门关上

# 2.文件的读取操作
# (1) 打开文件
fp = open("ceshi1.txt",mode="r",encoding="utf-8")
# (2) 读取内容
res = fp.read()
# (3) 关闭文件
fp.close()
print(res)

文件存储二进制字节流

"""
二进制字节流:`用于传输数据或者存储数据的一种数据格式
b"abc" b开头的字节流要求数据只能是ascii编码中的字符,不能是中文

# 将字符串和字节流(Bytes流)类型进行转换 (参数写成转化的字符编码格式)
    #encode() 编码  将字符串转化为字节流(Bytes流)
    #decode() 解码  将Bytes流转化为字符串
"""
data = b"abc" # bytes 字节流
data = "中文".encode("utf-8") # b'\xe4\xb8\xad\xe6\x96\x87'
print(data,type(data))
res = data.decode("utf-8")
print(res,type(res))

# utf-8下 一个中文占用3个字节
data = "中文".encode("utf-8")
# 计算字节总大小
print(len(data)) # 6

# 把中字这个字节流进行反解恢复成原来中的字符 "中"
res = b"\xe4\xb8\xad".decode()
print(res)

# 1.文件存储二进制的字节流
"""如果存储的是二进制字节流,指定模式wb,不要指定encoding编码集,如指定会报错""" 
fp = open("ceshi2.txt",mode="wb")
strvar = "红鲤鱼绿鲤鱼与驴".encode("utf-8")
fp.write(strvar)
fp.close()

# 2.文件读取二进制的字节流
fp = open("ceshi2.txt",mode="rb")
res = fp.read()
fp.close()
print(res)
print(res.decode())

文件的复制

"""所有的图片,音频,视频都需要通过二进制字节流来进行存储传输."""
# 先把原文件的二进制字节流读取出来
# 相对路径找 '集合.png' 相对于当前'3.py'这个文件
# fp = open("集合.png",mode="rb")
# 绝对路径找集合.png 从最底层一级一级往上找
fp = open(r"D:\python32_python\day01\集合.png",mode="rb")
res = fp.read()
fp.close()
# 计算文件中的字节个数 => 文件大小
print(len(res))

# 在把二进制字节流写入到另外一个文件中,相当于复制
fp = open("集合2.png",mode="wb")
fp.write(res)
fp.close()

文件操作的扩展模式

#打开模式 
w   write 写入模式      
	文件不存在则创建文件,存在的话则打开清空内容,并且将文件指针放在文件的开头

r   read  读取模式
	文件不存在则报错! 存在的话则打开文件,并且将文件指针放在文件的开头

a   append 追加模式
	文件不存在则创建文件,存在的话则打开文件,*并且将文件指针放在文件的末尾*

x   xor 异或模式 (了解,基本不使用)
	文件已存在则报错! 不存在的话则创建文件,将文件指针放在文件的开头

#扩展模式 (配合打开模式的辅助模式,自己单独不能使用)
    +   plus   增强模式(可以让文件具有读写功能)       
    b   bytes  bytes模式(二进制字节流)

#模式一共16种
    w,w+,wb,wb+
    r,r+,rb,rb+
    a,a+,ab,ab+
    x,x+,xb,xb+ 

文件光标的方法

"""
# (utf-8编码格式下 默认一个中文三个字节 一个英文或符号 占用一个字节)
    #read()		功能: 读取字符的个数(里面的参数代表字符个数)
		注意:从当前光标往右边读
    #seek()		功能: 调整指针的位置(里面的参数代表字节个数)
		seek(0)   把光标移动到文件的开头
		seek(0,2) 把光标移动到文件的末尾
    #tell()		功能: 当前光标左侧所有的字节数(返回字节数)
"""

1. r+ 先读后写

fp = open("ceshi3.txt",mode="r+",encoding="utf-8")
# 先读
res = fp.read()
# 在写, 此时光标已在文件最后面,这时再写就是追加在最后
fp.write("ab")
# 在读
fp.seek(0) # 通过seek把光标移动到开头
print(fp.read())
fp.close()

2. r+ 先写后读

fp = open("ceshi3.txt",mode="r+",encoding="utf-8")
# 移动光标到最后,否则r模式下,原字符会被覆盖
fp.seek(0,2)
# 先写
fp.write("cd")
# 把光标移动到文件的开头
fp.seek(0)
# 在读
res = fp.read()
print(res)
fp.close()

3. w+ 可读可写,清空重写(默认可以创建新的文件)

fp = open("ceshi4.txt",mode="w+",encoding="utf-8")
fp.write("abc")
fp.seek(0)
print(fp.read())
fp.close()

4. a+ 可读可写,追加写入 (默认可以创建新的文件)

fp = open("ceshi5.txt",mode="a+",encoding="utf-8")
fp.write("def")
# 读内容
fp.seek(0)
print(fp.read())
fp.close()

5. r+和a+区别

"""
r+模式基于当前光标所在位置进行写入覆盖
a+模式会强制把光标放到文件末尾进行追加写入
"""
# fp = open("ceshi5.txt",mode="r+",encoding="utf-8")
fp = open("ceshi5.txt",mode="a+",encoding="utf-8")
fp.seek(3) # 从头数 3个字节的位置
# fp.write("zxc") # 模式会强制把光标放到文件末尾进行追加写入
print(fp.read())
fp.close()

6. seek,tell,read 的使用

fp = open("ceshi5.txt",mode="r+",encoding="utf-8")
fp.seek(4)
# tell 返回当前光标左边所有内容的字节数
res = fp.tell()
print(res) # 4

# 在r+模式下 read(2) 代表读取2个字符 
# 在rb模式下 read(2) 代表读取2个字节
fp.read(2) # 当前光标往右所有的字符内容
print(fp.tell()) # 6
fp.close()

7. 注意点 (seek在移动时,又可能移动到某个汉字的字节中间,导致原字节无法解析)

fp = open("ceshi6.txt",mode="r+",encoding="utf-8")
fp.seek(3)
print(fp.read()) # 会报错
fp.close()

# print("你".encode())
# b'\xe4\xbd\xa0'

with 语法 自动实现文件关闭操作(重要)

# 方法一.读取二进制字节流
"""
with open("集合2.png",mode="rb") as fp:
	res = fp.read()

with open("集合3.png",mode="wb") as fp:
	fp.write(res)
"""
# 方法二.继续简化
with open("集合3.png",mode="rb") as fp1 , open("集合4.png",mode="wb") as fp2 :
	res = fp1.read()
	fp2.write(res)

字符编码(了解)

#字符:无论是什么语言,独立的一个文字就是一个字符
#存储单位:
    Byte字节
    bit:位  
    1B = 8b
    B:字节, 1Byte = 8bit
    
#字符大小:
    无论何种字符集:英文和数字都是一个字节,汉字,韩文,日文等亚洲文字采用多个字节存储
    GB系列编码:存储一个汉字使用2个字节 (国标编码:例如: gbk2312 )
    UTF系列编码:存储一个汉字使用3个字节(国际通用:例如: utf-8 )

#字符编码种类: (把编码看成一个密码本,每一个字符在计算机中都是个二进制)
    英文原始编码:
    ASCII码 -> 最早的字符编码格式->仅支持英文和特定的符号
    
    中文编码:
    GB2312 : 包含5000个常用汉字的标准
    GB18030: 升级版本的标准,大概15000个汉字
    GBK    : 包含所有中文汉字的编码(推荐)
    BIG5   : 繁体中文编码       
    
    万国码:
    unicode 包含世界上所有的文字(无论什么字符 都按照4个字节表示)
    utf-8   可变长的unicode编码

刷新缓冲区

# 刷新缓冲区 flush
    # 当文件关闭的时候自动刷新缓冲区
    # 当整个程序运行结束的时候自动刷新缓冲区
    # 当缓冲区写满了  会自动刷新缓冲区
    # 手动刷新缓冲区

fp = open("ceshi1.txt",mode="a",encoding="utf-8")
fp.write("abc")

# 手动刷新缓冲区,直接把内容写入到文件
fp.flush()

while True:  # 下面的close() 不会执行,会导致 abc 无法写入,需要手动刷新缓冲区
	pass

fp.close()

文件相关函数

readable() 功能: 判断文件对象是否可读

writable() 功能: 判断文件对象是否可写

"""fp这个对象本身是迭代器,可以把文件中的内容按照换行,一行一行遍历出来"""

fp = open("ceshi1.txt",mode="r",encoding="utf-8")
#readable()	    功能: 判断文件对象是否可读
print(fp.readable()) # True
#writable()	    功能: 判断文件对象是否可写
print(fp.writable()) # False
# 遍历fp文件对象
for i in fp:
	print(i)

1. readline() 功能: 读取一行文件内容

with open("ceshi1.txt",mode="r",encoding="utf-8") as fp:
	res = fp.readline() # 返回 读取的内容,读取不到是为 None
	print(res)
	res = fp.readline()
	print(res)
	res = fp.readline()
	print(res)
	res = fp.readline()
	print(res)
	
# (1)一次把所有内容都读取出来
with open("ceshi1.txt",mode="r",encoding="utf-8") as fp:
	# 先读取一行
	res = fp.readline()
	# 判断是不是空,不是空在循环
	while res:
		print(res)
		# 在读取一行,放到循环中判断.
		res = fp.readline()
	
# (2)注意点:readline(读取的字符数)
with open("ceshi1.txt",mode="r",encoding="utf-8") as fp:
	"""
	读取的字符数量 > 实际当前行字符数量的时候 => 按照当前行读取
	读取的字符数量 < 实际当前行字符数量的时候 => 按照实际数量来读
	"""
	res = fp.readline(300)
	print(res) # 最多只读取这一行的内容

2. readlines() 功能:将文件中的内容按照换行读取到列表当中

lst_new = []
with open("ceshi1.txt",mode="r+",encoding="utf-8") as fp:
	lst = fp.readlines()
	for i in lst:
		lst_new.append(i.strip()) # 取出读取到的字符两边的空白字符
print(lst_new)

3. writelines() 功能:将内容是字符串的可迭代性数据写入文件中 参数:内容为字符串类型的可迭代数据

lst = ['床前明月光', '疑是地上霜', '举头望明月', '低头想家乡']
with open("ceshi2.txt",mode="w+",encoding="utf-8") as fp:
	fp.writelines(lst)

# ### 实现效果:加入换行效果,并且插入一句话: 遥知不是雪, 插在低头想家乡的前面
lst_new = []
# 先把内容插入到原列表中
lst.insert(-1,"遥知不是雪")
# 循环原列表,把每一个元素拼接\n , 放到新列表
for i in lst:
	lst_new.append(i + "\n")
print(lst_new)
# 把新列表中的每行内容插入到文件中
with open("ceshi2.txt",mode="w+",encoding="utf-8") as fp:
	fp.writelines(lst_new)

# 注意点,内容必须是字符串,不能是整型
lst = [1,2,3]
with open("ceshi2.txt",mode="w+",encoding="utf-8") as fp:
	fp.writelines(lst) # 整型报错

4. truncate() 功能: 把要截取的字符串提取出来,然后清空内容将提取的字符串重新写入文件中 (字节)

# 最后只保留 3个字节数,把剩余的内容全部清除
with open("ceshi2.txt",mode="r+",encoding="utf-8") as fp:
	fp.truncate(3) # 字节数

总结:处理的单位

  • seek(字节)
  • truncate(字节)
  • read(字符/字节)
  • readline(字符/字节)

文章来源地址https://www.toymoban.com/news/detail-428746.html

到了这里,关于【python基础语法四】python对文件的操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python读写文件操作的三大基本步骤

    目录 基本步骤 常用函数 open()函数 close()函数 read()函数 readlines()函数 readline()函数 write()函数 writelines()函数 with语句 读写操作的应用: 拷贝文件  with 语句的嵌套 逐行拷贝 1. 打开文件:open(filepath, mode, encoding) 2. 读写文件:read() / write() 3. 关闭文件:close() python读取文件操作实

    2024年02月22日
    浏览(48)
  • Python编程实验五:文件的读写操作

    目录 一、实验目的与要求 二、实验内容 三、主要程序清单和程序运行结果 第1题 第2题 四、实验结果分析与体会 (1)通过本次实验,学生应掌握与文件打开、关闭相关的函数,以及与读写操作相关的常用方法的使用; (2)理解基于文件的词频统计以及数据分析的基本思路

    2024年03月14日
    浏览(54)
  • Python之Pandas读写文件及索引操作

    当使用Pandas做数据分析时,需要读取事先准备好的数据集,这是做数据分析的第一步。Panda提供了多种读取数据的方法: read_csv()用于读取文本文件 read_json()用于读取json文件 read_sql_query()读取sql语句的 CSV又称逗号分隔值文件,是一种简单的文件格式,以特定的结构来排列表格

    2024年02月05日
    浏览(48)
  • 【Python】Python读写.xlsx文件(基本操作、空值补全等)

    本文介绍如何使用使用 pandas 库来读取xlsx文件中的数据。 需要安装openpyxl库才可以读取xlsx文件,使用pip install openpyxl。 当然也可以用其他的库,比如openpyxl、xlrd,可以参考: https://blog.csdn.net/moasad/article/details/120120673 https://blog.csdn.net/liuyingying0418/article/details/101066630 2.1 基本操

    2023年04月13日
    浏览(56)
  • 【python 基础语法二】流程语法及字符串相关操作

    以冒号作为开始,用缩进来划分相同的作用域,这个整体是一个代码块 作用域:作用的区域 流程: 代码执行的过程 控制: 对代码执行过程中的把控 三大结构: 顺序结构: 默认代码从上到下,依次执行 分支结构: 单项分支、 双向分支、 多项分支、 巢状分支 循环结构: while / for 内置

    2023年04月26日
    浏览(92)
  • 【python基础教程】使用python读写各种格式的文件

    今天,小哥给大家提供了丰富的文件读写功能,可应用于各种文件格式。本篇博客将总结Python中读写各类文件的方法,包括文本文件、CSV文件、JSON文件、Excel文件等。无论你是初学者还是有经验的开发者,这里都将为你提供一份全面的文件操作指南。 读取文本文件 逐行读取

    2024年01月25日
    浏览(47)
  • C++文件操作基础 读写文本、二进制文件 输入输出流 文件位置指针以及随机存取 文件缓冲区以及流状态

    文本文件一般以行的形式组织数据。 包含头文件: #include fstream 类: ofstream(output file stream) ofstream 打开文件的模式(方式):类内open()成员函数参数2.参数1是文件存储/创建路径 例如:fout.open(filename,ios::app); 对于 ofstream,不管用哪种模式打开文件,如果文件不存在,都会创

    2024年01月25日
    浏览(53)
  • [代码案例]学会python读写各类文件的操作(excel,txt,mat)

    python读写三类文件 excel文件 txt文件 mat文件

    2024年02月13日
    浏览(68)
  • 【Python+Selenium】 实现对excel文件的读写操作,轻轻松松一步到位

    利用selenium在做自动化测试的时候,经常会用到数据来做批量测试,常用的方式有读取txt文件,xml文件,csv文件以及excel文 件几种。 使用 excel 来做数据管理时,需要利用 xlrd、xlwt 开源包来读写 excel。 在C:UsersAnyDesktop下,我们有一个名字叫test1的excel文件,里面的Sheet1数据表

    2024年02月05日
    浏览(43)
  • 90天玩转Python—11—基础知识篇:Python自动化操作Excel:读写、增删改查、分组统计全攻略

    90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Python编程基础:标识符、保留字、注释、多行语句、p

    2024年04月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包