功能基础篇3——Python中的输入输出、文件读写、序列化

IO

文件读写

open

open()为内置函数,用于读写文件

mode

  • 读写
    1. x,create,创建,文件存在报错,可写不可读
    2. r,read,读入,默认读写方式,文件不存在报错,可读不可写
    3. w,write,写入,文件不存在会创建文件,存在清空文件内容,可写不可读
    4. a,append,追加,文件不存在会创建文件,光标移至文件末尾,可写不可读
    5. +,update,更新(扩展),在x、r、w、a基础上扩展功能为可读可写,不能单独使用
  • 内容
    1. t,text,文本,默认读写内容,读取文本文件
    2. b,binary,二进制,读取二进制文件
  • 使用
    1. 必须且只能指定一个读写模式(x/r/w/a四选一,扩展+可选)
    2. 必须且只能指定一个读写内容(t、b二选一,通常t可省略)
    3. +不会因为可写而使得文件创建,r+模式打开文件,若文件不存在依然会报错

示例文本

file.txt12
你好9
世界9
。6
HELLO WORLD15
不念过往, 不畏将来30

读写文件

f = open('./file.txt', mode='r+', encoding='utf-8')  # Unicode字符集,UTF-8编码方式
print(f.readable())  # True 是否可读
print(f.writable())  # True 是否可写print(f.tell())  # 0 光标位置,按字节,最开始是0,0表示所有内容之前,不指向任何字节
print(f.read(11))  # file.txt12 按字符数量读取,默认读取所有,示例文本中第一行有12个字节
print(f.tell())  # 12 英文字母和标点占一个字节、换行(Windows CRLF)占两个字节
print(f.seek(15, 0))  # 15 移动光标到第15个字节 whence 0 :将开头作为参考位置 1 :将当前作为参考位置 2 :将末尾作为参考位置
print(f.tell())  # 15
print(f.readline())  # 好9 从当前位置向后读取一行,并不一定是完整一行 中文占3个字节
print(f.tell())  # 21
print(f.readlines())  # ['世界9\n', '。6\n', 'HELLO WORLD15\n', '不念过往, 不畏将来30'] 从当前位置向后读取若干行
print(f.tell())  # 79
print(f.seek(0))  # 0 回到最开始
print(f.write("不念过往, 不畏将来\n\n"))  # 12 写入12个字符,写30个字节,写多少覆盖多少
print(f.tell())  # 30
print(f.truncate(12))  # 23 截断文件,返回截断后的文件字节数,在文件某个位置截断,若文件末尾在截断位置之后,截断位置之后所有内容清除,若文件末尾在截断位置之前,不足的部分补空格,默认在当前光标位置截断,size = f.tell()
print(f.tell())  # 30 截断操作不改变光标位置
print(f.truncate())  # 30 不足补充空格
print(f.tell())  # 30 光标位置不变
f.close()  # 关闭文件# 最终示例文本会变为"不念过往                  "(后面是空格共18个)。

注:

  1. 在Python中\n表示换行,但针对不同平台python的\n对应不同的字符。
  2. Windows CRLF \r\n、Unix LF \n、MacOS CR \r
  3. 把Windows的一个文本文件直接上传Linux,再打开会出现格式问题。
  4. Git作为分布式版本控制系统,同一份代码要在各个平台协作开发,其实现了代码源文件中换行字符的自动转换。
  5. 上述源码在WIndows下运行没问题,在Linux或MacOS运行需要根据上述规则修改光标移动参数。

序列化

序列化是将内存中的对象转换成一定格式的二进制数据或文本数据,便于存储在文件中或者通过网络传输,后续根据该格式可从文件或者网络读入数据并重建对象的过程称之为反序列化。

  • 把对象存储在内存之外
  • 把对象传输到另一台机器的内存

json

https://www.json.org/json-en.html

# 序列化为json
import jsond = {1: "a", 2: "b"}
print(d, type(d))
d_dump = json.dumps(d)
print(d_dump, type(d_dump))
d_rd = json.loads(d_dump)
print(d_rd, type(d_rd))d = {1: "键值对", 2: "b"}
f = open("./dump.txt", "w", encoding="utf-8")
json.dump(d, f, ensure_ascii=False)
f.close()
f = open("./dump.txt", encoding="utf-8")
d = json.load(f)
f.close()
print(d, type(d))

pickle

# 序列化为pickle定义的二进制格式
import pickled = {1: "a", 2: "b"}
print(d, type(d))
d_dump = pickle.dumps(d)
print(d_dump, type(d_dump))
d_rd = pickle.loads(d_dump)
print(d_rd, type(d_rd))d = {1: "细节", 2: "b"}
f = open("./dump.txt", "wb")
pickle.dump(d, f)
f.close()
f = open("./dump.txt", "rb")
d = pickle.load(f)
f.close()
print(d, type(d))

shelve

# 序列化为shelve定义的二进制格式
import shelvef = shelve.open('open_file')
f['key'] = {'int': 11, 'float': 1.2, 'string': 'ssd'}
f.close()f = shelve.open('open_file', flag='r')
e = f['key']
f.close()
print(e)

ini文件操作

import configparserconfig = configparser.ConfigParser()
config["DEFAULT"] = {"ServerAliveInterval": 45,"Compression": "yes"
}
config["bitbucket.org"] = {"user": "da"}with open('config.ini', 'w') as configfile:config.write(configfile)config = configparser.ConfigParser()
config.read('config.ini')
print(config.sections())
print("bitbucket.org" in config)
print("b.org" in config)
print(config["bitbucket.org"]["user"])
print(config["DEFAULT"]["Compression"])
config.add_section("add-section")
config.remove_section("bitbucket.org")
config.set("add-section", "k1", "111")
config.set("add-section", "k2", "222")

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

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

相关文章

redis桌面连接工具Another Redis Desktop Manager使用介绍

Another Redis Desktop Manager是一种类似于navicat的数据库连接工具,专门用来连接redis,使用起来非常简单方便,在这里推荐给大家。 没有用过这个软件的,首先通过下面的网盘链接下载Another Redis Desktop Manager 百度网盘redi…

权限提升WIN篇(腾讯云,CS,MSF)

溢出漏洞 信息收集 操作系统版本ver,systeminfo漏洞补丁信息systeminfo操作系统位数systeminfo杀软防护tasklist /svc网络netstat -ano,ipconfig当前权限whoami 筛选EXP 根据前面的信息收集中的系统版本,位数和补丁情况筛选出合适的EXP 提权 根据EX…

Ubuntu22.04 Opencv4.5.1 CPU和GPU编译攻略,Opencv CPU和GPU编译保姆教程 亲自测试。

1、安装opencv依赖 安装时最好更换一下源。 sudo apt-get -y update sudo apt-get -y install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get -y install libgtk-3-dev gfortran openexr libatlas-base-dev python3-dev pyt…

flutter开发实战-长按TextField输入框cut、copy设置为中文复制、粘贴

flutter开发实战-长按TextField输入框cut、copy设置为中文复制、粘贴 在开发过程中,需要长按TextField输入框cut、copy设置为中文“复制、粘贴”,这里记录一下设置的代码。 一、pubspec.yaml设置flutter_localizations 在pubspec.yaml中设置flutter_l…

[python 刷题] 238 Product of Array Except Self

[python 刷题] 238 Product of Array Except Self 题目: Given an integer array nums, return an array answer such that answer[i] is equal to the product of all the elements of nums except nums[i]. The product of any prefix or suffix of nums is guar…

程序员必须掌握的算法

引言 作为一名程序员,掌握一些重要的算法是必不可少的。算法是解决问题的方法和步骤,对于程序员来说,熟悉和掌握一些常见的算法可以提高编程能力,解决复杂的计算问题。与此同时,算法是计算机科学中的核心概念&#xff…

pgsql/mysql/clickhouse性能对比

目前公司使用的关系型数据库版本较老,有计划对关系型数据库进行一次升级。有两个方案,一是将现在的mysql5.7升级到8.0,二是将数据库替换成pgsql15,所以对这两个库的查询写入和资源损耗进行一次对比。 前置准备 服务器 两台配置…

Cilium 1.11:服务网格的未来已来

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

Linux Ubuntu命令行快速配置C++开发环境

本文介绍在Linux操作系统的Ubuntu版本中,基于命令行,快速配置C 编辑、编译、运行的代码开发环境的简便方法。 在之前的文章Linux操作系统Ubuntu 22.04配置Visual Studio Code与C代码开发环境的方法(https://blog.csdn.net/zhebushibiaoshifu/article/det…

星际争霸之小霸王之小蜜蜂(十三)--接着奏乐接着舞

系列文章目录 星际争霸之小霸王之小蜜蜂(十二)--猫有九条命 星际争霸之小霸王之小蜜蜂(十一)--杀杀杀 星际争霸之小霸王之小蜜蜂(十)--鼠道 星际争霸之小霸王之小蜜蜂(九)--狂鼠之…

什么是集成测试?集成测试方法有哪些?

1、基本概念: 将软件集成起来后进行测试。集成测试又叫子系统测试、组装测试、部件测试等。集成测试主要是针对软件高层设计进行测试,一般来说是以模块和子系统为单位进行测试。 2、集成测试包含的层次: 1. 模块内的集成,主要是…

Linux sed

1.sed介绍 sed:Stream Editor,流编辑器、行编辑器、逐行编辑 sed将每行内容读入到“内存”中,在内存中进行处理,将结果返回给屏幕,此段内存空间称为模式空间。 sed默认不编辑原文件,仅对模式空间的数据进行处理&…

OA 电子审批流程是什么?

公司中,最最最常见也是最最最多的就是——各种审批。 我当年第一次实习,在一家国企的行政部门,我们部门领导那个时候最主要的工作就是“打通流程”,咱也不知道他在打通什么流程,反正这个很重要就是了。 结果&#xf…

CSS动效合集之实现气泡发散动画

前言 👏CSS动效合集之实现气泡发散动画,速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现步骤 定义一个数组bubbles,用来存储气泡列表的基本新,w表示宽高,x表示绝对定位…

【Python基础】P01S01 变量与字符串

P01S01 变量与字符串 变量变量的命名规则 字符串字符串的表达方法字符串的基本操作 数整数与浮点数数中下划线常量 注释 变量 变量的命名规则 变量名只能包含字母、数字和下划线; 变量名能以字母或下划线开头,但是不能以数字开头; 变量名不能…

130. 被围绕的区域

130. 被围绕的区域 题目-中等难度示例1. 新建boardbfs2. 哈希bfs 题目-中等难度 给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例 示例 1&#x…

6.SpringEL与List,Map

SpringEL与List,Map 文章目录 SpringEL与List,Map介绍Spring EL以注解的形式Spring EL以XML的形式 介绍 使用SpEL与 Map 和 List 的工作方式与Java是完全一样的 //get map whete key MapA Value("#{testBean.map[MapA]}") private String mapA;//get first value …

浅谈C++|类的继承篇

引子: 继承是面向对象三大特性之一、有些类与类之间存在特殊的关系,例如下图中: 我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。 这个时候我们就可以考虑利用继承的技术,减少…

2023全新TwoNav开源网址导航系统源码 | 去授权版

2023全新TwoNav开源网址导航系统源码 已过授权 所有功能可用 测试环境:NginxPHP7.4MySQL5.6 一款开源的书签导航管理程序,界面简洁,安装简单,使用方便,基础功能免费。 TwoNav可帮助你将浏览器书签集中式管理&#…

线程池启动线程 submit () 和 execute () 方法有什么不同?

ThreadPoolExecutor类是Java中用于创建和管理线程池的类,它提供了多个方法来提交任务给线程池,其中包括submit()和execute()方法。这两种方法有以下不同: 返回值:submit()方法返回一个Future对象,可以使用这个对象来跟踪任务的执行状态并获取任务的结果(如果有的话)。Fu…