Python文件写入读取,文件复制以及一维,二维,多维数据存储

基础解释

在 Python 中,文件操作的模式除了 w (只写)、 a (追加写)、 r (只读)外,还有以下几种常见模式:

-  r+ :可读可写。该文件必须已存在,写操作是追加在文件内容末尾。若先读后写,写入时是从文本最后面开始追加;若先写后读,从文本开头写入时会覆盖对应个数的字符。
-  w+ :写读模式。打开创建新文件并写入数据,如果文件已存在,则覆盖写。无论是先写后读还是先读后写,刚打开文件时读取内容都为空,因为写入操作会清空原内容。若要读取完整内容,需将光标移到首位,可使用 f.seek(0) 方法。
-  a+ :追加读写模式。打开文件的方式与写入方式和 a 一样,如果文件不存在则创建新文件,不会清空原内容,写入内容会追加在文件末尾。但刚用 a+ 打开一个文件时,一般不能直接读取,因为此时光标在文件末尾,除非把光标移动到初始位置或任意非末尾的位置,可使用 seek() 方法解决。
-  rb :以二进制方式读取文件。该文件必须已存在。
-  wb :表示以二进制写方式打开,只能写文件,如果文件不存在,创建该文件;如果文件已存在,则覆盖写。
-  ab :以二进制追加模式打开,若文件不存在则创建新文件,用于以二进制形式在文件末尾追加数据。
 
总结来说,这些模式可以分为三大类:读 r (read)、写 w (write)、追加 a (append),后面加 b 表示以二进制形式操作文件,加 + 表示可读可写。

文件写入

示例代码:写入列表和直接写入文字不一样

def my_write(s):file=open("a.txt","a",encoding="utf-8")file.write(s)file.write('\n')file.close()
def my_write_lst(file,lst):f=open(file,"w",encoding="utf-8")f.writelines(lst)f.close()
if __name__ == '__main__':my_write("伟大的航天梦")my_write("北京欢迎你")lst=["姓名\t","年龄\n","张三\t","18\t"]#只能为字符串my_write_lst("c.txt",lst)

代码结果:

并不是都是,为了方便都截图了,找到自己创建的文件,open是打开,在文件不存在时会自动创建,点开文件查看结果即可。

文件的读取操作

示例代码:

def write_read(filename):file=open("d.txt","w+",encoding="utf-8")file.write("你好啊")#写入完成,文件的指针在最后#seek  修改文件指针的位置file.seek(0)# s=file.read()#读取全部内容# s=file.read(1)#读取一个字符# s=file.readline()#读取一行# s=file.readline(1)#读取一行的几个字符# s=file.readlines()#一行为一个列表的元素,返回值为列表#读取“好啊”,要移动指针的位置file.seek(3)#3表示三个字节,utf-8一个中文3个字节s=file.read()print(type(s),s)file.close()
if __name__ == '__main__':write_read("d.txt")

代码结果:先写入

文件的复制

示例代码:两个路径

def copy(src,new_file):#打开原文件file1=open(src,"rb")#rb为按二进制读取#打开目标文件file2=open(new_file,"wb")#边读边写s=file1.read()file2.write(s)file2.close()file1.close()#先打开的后关,后打开的先关
if __name__ == '__main__':src="./百度.png"#.代表的是当前目录new_file="../第十章/copy_百度.png"#两个点表示上级目录,相当于Windows的后退copy(src,new_file)print("复制完成")

代码结果:

admin是一个包,没有关系。

with语句

示例代码:简化读写代码过程,自动关闭文件

def write_fun():with open("aa.txt","w",encoding="utf-8") as file:file.write("北京欢迎你")
def read_fum():with open("aa.txt","r",encoding="utf-8") as file:print(file.read())
def copy(src,target):with open(src,"r",encoding="utf-8") as file1:with open(target,"w",encoding="utf-8") as file2:file2.write(file1.read())
if __name__ == '__main__':write_fun()read_fum()copy("./aa.txt","./dd.txt")

效果和前面差不多,就就不展示了,方便很多。

一维和二维数据的储存和读取

示例代码:
 

#一维数组的存储
def write_list():#一维数据,可以是集合,元组,列表lst=["陈俊宇","李佳怡","李静怡","蔡健雅"]with open("一维.txt","w",encoding="utf-8") as file:file.write(",".join(lst))
def read_list():with open("一维.txt","r",encoding="utf-8") as file:s=file.read()lst=s.split(",")print(lst)
def write_list2():lst=[["姓名","学号","排名"],["李静怡","001","12"],["蔡健雅","002","13"]]with open("二维.txt","w",encoding="utf-8") as file:for item in lst:line=",".join(item)file.write(line)file.write("\n")
def read_list2():data=[]with open("二维.txt","r",encoding="utf-8") as file:lst=file.readlines()#每一行的元素为一个列表for item in lst:new_lst=item[:len(item)-1].split(",")data.append(new_lst)print(data)
if __name__ == '__main__':write_list()read_list()write_list2()read_list2()

代码结果:先写入后读取

多维数据的存储和读取

示例代码:

import json
#准备高维数据
lst=[{"lys":10,"cxx":20},{"lsk":20,"skk":55},{"lsl":55,"jsh":44},{"ksk":44,"skp":55}
]
s=json.dumps(lst,ensure_ascii=False,indent=4)#ensure_ascii使其正常显示中文,indent可以增加缩进,美观
print(type(s))#编码
print(s)#编码 list>str,原本是字典
#解码
lst2=json.loads(s)
print(type(lst2))
print(lst2)
print()
#编码到文件中
with open("多维数据.txt","w+",encoding="utf-8") as file:json.dump(lst,file,ensure_ascii=False,indent=4)
with open("多维数据.txt","r",encoding="utf-8") as file:lst3=json.load(file)print(lst3)

代码结果:解码和读取出来的结果是一样的,是列表,但是编码数据类型是字符串,显示出来是列表的样式。

<class 'str'>
[
    {
        "lys": 10,
        "cxx": 20
    },
    {
        "lsk": 20,
        "skk": 55
    },
    {
        "lsl": 55,
        "jsh": 44
    },
    {
        "ksk": 44,
        "skp": 55
    }
]
<class 'list'>
[{'lys': 10, 'cxx': 20}, {'lsk': 20, 'skk': 55}, {'lsl': 55, 'jsh': 44}, {'ksk': 44, 'skp': 55}]

[{'lys': 10, 'cxx': 20}, {'lsk': 20, 'skk': 55}, {'lsl': 55, 'jsh': 44}, {'ksk': 44, 'skp': 55}]

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

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

相关文章

分类损失函数 (一) torch.nn.CrossEntropyLoss()

1、交叉熵 是一种用于衡量两个概率分布之间的距离或相似性的度量方法。机器学习中&#xff0c;交叉熵常用于损失函数&#xff0c;用于评估模型的预测结果和实际标签的差异。公式&#xff1a; y&#xff1a;真是标签的概率分布&#xff0c;y&#xff1a;模型预测的概率分布 …

数据库中的内、外、左、右连接

常用的数据库连表形式&#xff1a; 内连接 &#xff1a;inner join 外连接 &#xff1a;outer join 左外连接 &#xff1a;left outer join 左连接 &#xff1a;left join 右外连接 right outer join 右连接&#xff1a; right join 全连接 full join 、union 一、内连接 内…

企业私有云的部署都有哪些方式?

如今常见的企业私有云的部署方式有自建私有云、托管私有云、虚拟私有云、混合云、容器化私有云、本地数据中心部署等。如今&#xff0c;企业私有云的部署呈多样化趋势&#xff0c;以用来满足各个企业的具体需求。以下是RAK部落小编为大家汇总的企业私有云常见的部署方式&#x…

LeetCode 58.最后一个单词的长度 C++

LeetCode 58.最后一个单词的长度 C 思路&#x1f914;&#xff1a; 先解决当最后字符为空格的情况&#xff0c;如果最后字符为空格下标就往后移动&#xff0c;直到不为空格才停止&#xff0c;然后用rfind查询空格找到的就是最后一个单词的起始位置&#xff0c;最后相减就是单词…

C++ 正则库与HTTP请求

正则表达式的概念和语法 用于描述和匹配字符串的工具&#xff0c;通过特定的语法规则&#xff0c;灵活的定义复杂字符串匹配条件 常用语法总结 基本字符匹配 a&#xff1a;匹配字符aabc&#xff1a;匹配字符串abc 元字符&#xff08;特殊含义的字符&#xff09; .&#xff1a;匹…

1Panel面板配置java运行环境及网站的详细操作教程

本篇文章主要讲解&#xff0c;通过1Panel面板实现java运行环境&#xff0c;部署网站并加载的详细教程。 日期&#xff1a;2024年7月21日 作者&#xff1a;任聪聪 独立博客&#xff1a;https://rccblogs.com/501.html 一、实际效果 二、详细操作 步骤一、给我的项目进行打包&am…

在jsPsych中使用Vue

jspsych 介绍 jsPsych是一个非常好用的心理学实验插件&#xff0c;可以用来构建心理学实验。具体的就不多介绍了&#xff0c;大家可以去看官网&#xff1a;https://www.jspsych.org/latest/ 但是大家在使用时就会发现&#xff0c;这个插件只能使用js绘制界面&#xff0c;或者…

STM32自己从零开始实操10:PCB全过程

一、PCB总体分布 分布主要参考有&#xff1a; 方便供电布线。方便布信号线。方便接口。人体工学。 以下只能让大家看到各个模块大致分布在板子的哪一块&#xff0c;只能说每个人画都有自己的理由&#xff0c;我的理由如下。 还有很多没有表达出来的东西&#xff0c;我也不知…

PingCAP 王琦智:下一代 RAG,tidb.ai 使用知识图谱增强 RAG 能力

导读 随着 ChatGPT 的流行&#xff0c;LLMs&#xff08;大语言模型&#xff09;再次进入人们的视野。然而&#xff0c;在处理特定领域查询时&#xff0c;大模型生成的内容往往存在信息滞后和准确性不足的问题。如何让 RAG 和向量搜索技术在实际应用中更好地满足企业需求&#…

昇思25天学习打卡营第14天|计算机视觉

昇思25天学习打卡营第14天 文章目录 昇思25天学习打卡营第14天FCN图像语义分割语义分割模型简介网络特点数据处理数据预处理数据加载训练集可视化 网络构建网络流程 训练准备导入VGG-16部分预训练权重损失函数自定义评价指标 Metrics 模型训练模型评估模型推理总结引用 打卡记录…

FPGA开发在verilog中关于阻塞和非阻塞赋值的区别

一、概念 阻塞赋值&#xff1a;阻塞赋值的赋值号用“”表示&#xff0c;对应的是串行执行。 对应的电路结构往往与触发沿没有关系&#xff0c;只与输入电平的变化有关系。阻塞赋值的操作可以认为是只有一个步骤的操作&#xff0c;即计算赋值号右边的语句并更新赋值号左边的语句…

Transformer-Bert---散装知识点---mlm,nsp

本文记录的是笔者在了解了transformer结构后嗑bert中记录的一些散装知识点&#xff0c;有时间就会整理收录&#xff0c;希望最后能把transformer一个系列都完整的更新进去。 1.自监督学习 bert与原始的transformer不同&#xff0c;bert是使用大量无标签的数据进行预训…

规范:前后端接口规范

1、前言 随着互联网的高速发展&#xff0c;前端页面的展示、交互体验越来越灵活、炫丽&#xff0c;响应体验也要求越来越高&#xff0c;后端服务的高并发、高可用、高性能、高扩展等特性的要求也愈加苛刻&#xff0c;从而导致前后端研发各自专注于自己擅长的领域深耕细作。 然…

volatile,最轻量的同步机制

目录 一、volatile 二、如何使用&#xff1f; 三、volatile关键字能代替synchronized关键字吗&#xff1f; 四、总结&#xff1a; 还是老样子&#xff0c;先来看一段代码&#xff1a; 我们先由我们自己的常规思路分析一下代码&#xff1a;子线程中&#xff0c;一直循环&…

NoSQL之Redis非关系型数据库

目录 一、数据库类型 1&#xff09;关系型数据库 2&#xff09;非关系型数据库 二、Redis远程字典服务器 1&#xff09;redis介绍 2&#xff09;redis的优点 3&#xff09;Redis 为什么那么快&#xff1f; 4&#xff09;Redis使用场景 三、Redis安装部署 1&#xff0…

kail-linux如何使用NAT连接修改静态IP

1、Contos修改静态IP vi /etc/sysconfig/network-scripts/ifcfg-ens33&#xff0c; 标记红色处可能序号会变动 参考linux配置网络不通解决方案_kylinv10sp2 网关不通-CSDN博客https://tanrt06.blog.csdn.net/article/details/132430485?spm1001.2014.3001.5502 Kail时候NAT连…

从 NextJS SSRF 漏洞看 Host 头滥用所带来的危害

前言 本篇博文主要内容是通过代码审计以及场景复现一个 NextJS 的安全漏洞&#xff08;CVE-2024-34351&#xff09;来讲述滥用 Host 头的危害。 严正声明&#xff1a;本博文所讨论的技术仅用于研究学习&#xff0c;旨在增强读者的信息安全意识&#xff0c;提高信息安全防护技能…

浅谈断言之XML Schema断言

浅谈断言之XML Schema断言 “XML Schema断言”是一种专门用于验证基于XML的响应是否遵循特定XML Schema定义的标准和结构的断言类型。下面我们将详细探讨XML Schema断言的各个方面。 XML Schema断言简介 XML Schema断言&#xff08;XML Schema Assertion&#xff09;允许用户…

fastJSON 解决kafka消息斜杠转义问题

Bug: kafka发送消息时的JSON转义异常 问题描述: 问题描述:kafka消息发送出去但是消费者执行相关逻辑的时候报错. 场景:当时实习的时候需要模拟数据做一个实时经纬度传输的接口,使用kafka实时发送消息将数据同步到数据库中 问题分析: fastjson使用不当可能导致转义异常**,kafka…

Android 15 之如何快速适配 16K Page Size

在此之前&#xff0c;我们通过 《Android 15 上 16K Page Size 为什么是最坑》 介绍了&#xff1a; 什么是16K Page Size为什么它对于 Android 很坑如何测试 如果你还没了解&#xff0c;建议先去了解下前文&#xff0c;然后本篇主要是提供适配的思路&#xff0c;因为这类适配…