5、python中的文件操作
创始人
2024-02-23 21:43:02

文章目录

  • 文件操作介绍
    • 文件的打开操作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:  #将打开的文件对象赋值给ff.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:  # 将打开的文件对象赋值给ff.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 platformprint(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 jsonusers = {"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 jsonusers = {"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')

在这里插入图片描述

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...