5、python中的文件操作

news2025/1/9 20:18:07

文章目录

  • 文件操作介绍
    • 文件的打开操作open()
    • 文件的关闭操作
  • os模块
    • 关于操作系统
    • 关于路径
  • json模块
    • 将python对象编码成json字符串
      • 序列化和反序列化常用参数
    • 将json字符串解码为python对象
  • 存储为excel文件


文件操作介绍

文件的作用:数据的持久化存储
一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,那么重启电脑之后,这些数据就都丢失了。这是因为默认数据是加载到内存中,结果也是保存到内存中,程序执行结束,所有的数据都将释放。

新建文件:
在这里插入图片描述

文件的打开操作open()

编写python文件(文件操作.py)

#打开文件,相对路径
f = open('doc/test.txt') #文件打开之后,将其存储为一个文件对象
#文件的读写操作
print(f.read())
#关闭文件
f.close()

在这里插入图片描述open()默认 mode=r,只有读权限

open()函数设置 mode=w,具有写权限,但是会先将文件原内容清空,然后再写进去

#打开文件,相对路径
f = open('doc/test.txt',mode='w') #文件打开之后,将其存储为一个文件对象
#文件的读写操作
f.write('java\n')
#关闭文件
f.close()

在这里插入图片描述
但是如果不想清空文件原内容,可以使用open()函数的追加模式,mode='a'

#打开文件,相对路径
f = open('doc/test.txt',mode='a') #文件打开之后,将其存储为一个文件对象
#文件的读写操作
f.write('linux\nlinux')
#关闭文件
f.close()

在这里插入图片描述
open函数的模式,看下图:
在这里插入图片描述

文件的关闭操作

  • 调用 close() 方法关闭文件。文件使用之后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的
  • python中引入了with语句,能自动调用 close() 方法

python中的with语句适用于对资源进行访问的场合,保证不管处理过程中是否发生错误或异常都会自动执行规定的 “清理” 操作,释放被访问的资源,比如文件读写后自动关闭,线程中锁的自动获取或释放等。

#doc/hello.txt是不存在的文件,对其写入
with open('doc/hello.txt','w+') as f:  #将打开的文件对象赋值给f
    f.write('hello world\n')
    print(f.read())  

在这里插入图片描述
上述程序语句 print(f.read()) 不会输出,因为在doc/hello.txt文件写入内容之后,指针是指向内容末尾,没东西能读。如果要读取文件内容,需要将指针移向文件最开始的位置。

seek(offset ,from) :offset表示偏移量,from表示方向
0:表示文件开头
1:表示当前位置
2:表示文件末尾
把位置设置成文件最开始:seek(0,0)
把位置设置成文件最末尾:seek(0,2)

# doc/hello.txt是不存在的文件,对其写入
with open('doc/hello.txt', 'w+') as f:  # 将打开的文件对象赋值给f
    f.write('hello world\n')
    f.seek(0, 0) #将指针移动到开头位置
    print('当前指针位置:', f.tell()) #打印指针位置
    print(f.read())
    f.seek(0, 2) #将指针移动到末尾位置
    print('当前指针位置:', f.tell()) #打印指针位置

在这里插入图片描述

os模块

是管理操作系统的一些方法

os,语义为操作系统,处理操作系统相关的功能,可跨平台。

关于操作系统

import os
import platform

print(os.name)  # 1、获取操作系统类型,nt是指Windows操作系统
# 2、获取主机信息,
#Linux系统使用os模块,Windows使用platform模块
# 不能的平台需要使用不同的代码,如何实现代码的跨平台?
try:  # 可能报错的代码
    uname = os.uname()
except Exception:  # 出现异常执行的代码
    uname = platform.uname()
finally:  # 不管是否有异常,都会执行的代码
    print(uname)

# 3、获取系统的环境变量
envs = os.environ
print(envs)

# 4、通过key值,获取系统变量对应的value值
print(os.environ.get('PATH'))
print(os.getenv('PATH'))

关于路径

import os

# 判断是否为绝对路径
print(os.path.isabs('/tmp/abc')) #True
print(os.path.isabs('abc')) # false

# 生成绝对路径
print(os.path.abspath('/tmp/abc'))
print(os.path.abspath('zbc.txt'))

#文件名和目录名的拼接,join拼接
#os.path.dirname()获取某个文件对应的目录名
#  _ _file_ _ 表示当前文件
base_dir=os.path.dirname(_ _file_ _) #获取当前目录名
#setting_file1=base_dir + '/' + 'abc.txt' #拼接方法一,不建议
#print(setting_file1)
setting_file2=os.path.join(base_dir,'dev.conf')  #拼接方法二,建议
print(setting_file2)

#获取当前文件名、目录名
print(os.path.basename(_ _file_ _))  
print(os.path.dirname(_ _file_ _))

在这里插入图片描述
另外,还有rename()可以完成对文件的重命名操作。os模块中的remove()可以完成对文件的删除操作

  • rename(需要修改的文件名,新的文件名)

  • remove(待删除的文件名)

  • os.mknod(‘abc.txt’) ,Linux下创建文件,Windows下创建文件可以按照如下方式
    with open(‘doc/hello.txt’,‘w+’) as f:
    pass

  • os.exists(‘abc.txt’) 判断文件或目录是否存在

  • os.path.splitext(‘hello.txt’) 将文件名和后缀名分隔开

  • os.path.split(‘hello.txt’) 将文件名和后缀名分隔开

  • os.path.split(‘/tmp/hello/hello.txt’) 将文件名和目录名分隔开

json模块

json(javascript object notation) 是一种轻量级的数据交换格式。
可能一个项目是由多种语言编写的,比如 c 、python、Java等等,那么怎么把C语言得到的结果传递给python呢?然后python对得到的数据进一步操作呢?

json采用完全独立于语言的文本格式,是一种理想的数据交换语言。易于人们阅读和编写,同时也易于机器解析和生成。(一般用于提升网络传输效率)

python中的集合不能转换成json格式

具体实现:
在这里插入图片描述

dump() 表示存储到某一个文件中去,如果不需要存储到文件就使用 dumps()

将python对象编码成json字符串

  • json.dumps()将python中字典类型的数据转成json字符串
  • json.dump()将python中的字典数据类型转换为json字符串,并写入文件中
# 将python对象编码成json字符串
import json

users = {"name": "lee", "age": 18, "city": "上海"}
json_str = json.dumps(users)  #不存储到文件中
print(json_str,type(json_str)) #字符串类型

#将python对象编码成json字符串,并保存到文件中
with open('doc/save_json.json','w') as f:
    json.dump(users,f)
    print("存储成功")

在这里插入图片描述在这里插入图片描述
但是保存到文件中之后,中文看不懂,

序列化和反序列化常用参数

json.dumps()函数有一些常用参数:

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None,
encoding=“utf-8”, default=None, sort_keys=False, **kw)

  • ensure_ascii=false , 则设定了中文存储
  • indent=4 , 设定缩进为4个空格,增强可读性,但是缩进空格会使数据变大
  • separators(‘,’,‘:’) , 自定义分隔符,元素间分隔符为逗号,字典key和value的分隔符为冒号
  • sort_keys=True , 字典排序
# 将python对象编码成json字符串
import json

users = {"name": "lee", "age": 18, "city": "上海"}
json_str = json.dumps(users)  #不存储到文件中
print(json_str,type(json_str))
#将python对象编码成json字符串,并保存到文件中
with open('doc/save_json.json','w') as f:
    json.dump(users,f,ensure_ascii=False,indent=4)
    print("存储成功")

在这里插入图片描述

将json字符串解码为python对象

  • json.load()操作的是文件流,把json格式字符串转化为python中的字典,读取的是文件
  • json.loads()操作的是字符串,把json格式字符串转换为python中的字典

json文件:
在这里插入图片描述

import  json
with open('doc/save_json.json') as f: #只读方式打开json文件
    py_obj=json.load(f)
    print(py_obj,type(py_obj))

运行结果:
在这里插入图片描述

存储为excel文件

import pandas 出现错误,未安装pandas,
打开terminal,pip install pandas -i https://pypi.douban.com/simple
在这里插入图片描述
安装对excel操作的模块: pip install openpyxl -i https://pypi.douban.com/simple
在这里插入图片描述安装openpyxl成功之后还是会显示“no module named openpyxl”,是因为还没有把这个库加入到Pycharm中,按照文章 https://blog.csdn.net/Mr_kanger/article/details/111879098,程序运行成功

import pandas
hosts=[
    {'host':'1.1.1.1','hostname':'test1','idc':'ali'},
    {'host':'1.1.1.2','hostname':'test2','idc':'ali'},
    {'host':'1.1.1.3','hostname':'test3','idc':'huawei'},
    {'host':'1.1.1.4','hostname':'test4','idc':'ali'}
]
#转换数据类型
df = pandas.DataFrame(hosts)  #将hosts转换成二维DataFrame对象
#存储成excel
df.to_excel('doc/hosts.xlsx')
print('success')

在这里插入图片描述

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

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

相关文章

小满Vue3第四十六章(Proxy跨域)

1.首先我们先了解一下什么是跨域 主要是出于浏览器的同源策略限制,它是浏览器最核心也最基本的安全功能。 当一个请求url的 协议、域名、端口 三者之间任意一个与当前页面url不同即为跨域。 例如 xxxx.com -> xxxx.com 存在跨域 协议不同 例如 127.x.x.x:800…

Dubbo3.0新特性

服务注册模型 注册模型从接口级别服务注册改为 应用级别服务之策 应用级服务发现简介 概括来说,Dubbo3 引入的应用级服务发现主要有以下优势 适配云原生微服务变革。云原生时代的基础设施能力不断向上释放,像 Kubernetes 等平台都集成了微服务概念抽…

关于各种PLMN的选择

RAT:Radio Access Technology RPLMN:Registered PLMN 终端在上次关机或脱网前登记上的PLMN,会临时保存在USIM卡上 HPLMN: Home PLMN 用户USIM对应IMSI的PLMN EHPLMN:EquivalentHome PLMN,HPLMN对应的运营商可能会有不同的号段,例如中国移动有…

【软考】-- 操作系统(中)

操作系统(中):第三节 存储管理🎀一、存储管理的基本概念1️⃣存储管理2️⃣存储方式分类:3️⃣相对地址4️⃣相对地址空间通过地址再定位机构转换到绝对地址空间(物理地址空间)🎁二、存储方式&a…

WFST--学习笔记

(Weighted Finite-State Transducer):加权有限状态转换机,由有限状态接收机(FSA)拓展而来,在ASR领域常被称为“解码器”。是一个包含了声学模型(H)、上下文相关处理的FST(context-dependency transducer, C…

手画图解 | 关于死锁,面试的一切都在这里了

什么是死锁(Deadlock) 死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象。若无外力作用,它们都将无法推进下去。 产生死锁的四个必要条件得烂熟于心: 互斥条件:进程要求对…

艾美捷QuickTiter 逆转录病毒定量试剂盒测定原理

逆转录病毒基因转移是一种有效地将稳定的、可遗传的遗传物质导入大肠杆菌的技术任何分裂细胞类型的基因组。不能复制的逆转录病毒通常通过将逆转录病毒载体转染到包装细胞系中。逆转录病毒根据用于进入宿主细胞的受体。亲嗜性病毒可以识别仅在小鼠身上发现的受体和大鼠细胞。兼…

【信息融合】基于matlab BP神经网络和DS证据理论不确定性信息融合问题【含Matlab源码 2204期】

⛄一、 D-S证据理论及解释 证据理论由Dempster在1967年最初提出,并由他的学生Shafer改进推广使之成为符合有限离散领域中推理的形式,因此称为D-S理论。证据理论讨论一个“辨识框架”(Frame of Discernment)Θ,它是关于命题的相互独立的可能答案或假设的一个有限集合。按传统方…

Qml中的那些坑(三)---MouseArea上的ListView滚轮事件穿透

【写在前面】 最近在 Qml 中使用 MouseArea 时发现了一个奇怪的现象: 位于 MouseArea 上的 ListView 在处理了滚轮事件的情况下进行滚轮,下面的 MouseArea 却在某些情况下接收到了这个事件。 按照直觉,ListView 明明有内部的滚轮事件处理&…

Cesium中的DataSource和Entity关系

本章主要探讨一下Cesium中的DataSource和Entity。 介绍 首先简单说一下Entity与Primitive。 Cesium为开发者提供了丰富的图形绘制和空间数据管理的API,可以分为两类,一类是面向图形开发人员的低层次API,通常被称为Primitive API&#xff0…

Java基础知识点整理

一、Java概述 1、何为编程 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程。 为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路、方法、和手段通过计算机能够理解的形式告诉计算机&#xff…

助力工业物联网,工业大数据项目介绍及环境构建【一】

文章目录工业大数据项目介绍及环境构建01:专栏目标02:项目背景03:项目需求04:业务流程05:技术选型06:Docker的介绍07:Docker的网络08:Docker的使用09:Oracle的介绍10&…

关于SQL的返回行数top

第一节.知识点三:关键字wlth tles 我要讲的是关于SQL的3个限制返回行数top: 1.使用具有恒定值的top; 2.关键字percent(%)返回行的百分比; 3.理解关键字wlth tles 上一次已经讲了前两个了,现在我要讲的是第三个 3.理解关键字wlth t…

【计算机毕业设计】69.助残志愿者系统源码

一、系统截图(需要演示视频可以私聊) 摘 要 本课题要求实现一套助残助残志愿者系统设计与开发,系统主要包括系统用户信息、志愿者信息、服务项目、志愿项目,志愿者培训、志愿项目、公益活动等功能模块。 基于上述分析&#xff0…

助力教育信创快速发展,统信软件与山东四所高校建立信创应用重点实验室

国家在“十三五”、“十四五”规划中重点强调了信息安全在国家战略中的重要地位,而大力发展教育信创有助于我国信息安全的快速落地。同时,教育部等六部门印发《关于推进教育新型基础设施建设构建高质量教育支撑体系的指导意见》也提到:推广可…

E+H浊度仪维修CUE22-A1A浊度分析仪维修概述

CUE21/22浊度仪参数如下: 测量参数:浊度 测量原理:散射光原理 应用场合:饮用水;生产用水 处理后的过程水 测量范围:0…100NTU;0…1000NTU 信号输出:4 ... 20 mA 通讯协议&…

多线程同步,信号,生产者消费者模型

目录1.线程互斥它是对的吗?合理吗?(任何场景)2.怎么解决饥饿问题?3.条件编译1.生产者和消费者模型2.编写代码实现一个基于堵塞队列的生产者消费者模型4.POSIX信号量5.环形队列1.线程互斥它是对的吗?合理吗?(任何场景) …

【JavaSE】多态

目录 1、多态 1.1、多态的概念 1.2、多态的实现条件 1.3、向上转型和向下转型 1.3.1、向上转型 1.3.2、向下转型 1.3.3、instanceof关键字 2、重写 2.1、重写的使用 2.2、动态绑定和静态绑定 2.2.1、动态绑定 2.2.2、静态绑定 2.3、再谈重写 3、多态的优缺点 4、…

LabVIEW浮点型和双精度数据类型之间的精度差异是什么 为什么 在LabVIEW 中, 浮点 数 会 失去 精度?

LabVIEW浮点型和双精度数据类型之间的精度差异是什么 为什么 在LabVIEW 中, 浮点 数 会 失去 精度? 程序中使用浮点数据类型或双精度数据类型。这些数据类型之间有什么区别? 浮点型的变量只有 7 位精度,而双精度类型的变量有 15…

算法竞赛入门【码蹄集进阶塔335题】(MT2296-2300)

算法竞赛入门【码蹄集进阶塔335题】(MT2296-2300) 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2296-2300)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件?目录1. MT2296 找朋友2. MT2297 盒子与球3. MT2298 点餐4. MT…