文件的作用:数据的持久化存储
一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,那么重启电脑之后,这些数据就都丢失了。这是因为默认数据是加载到内存中,结果也是保存到内存中,程序执行结束,所有的数据都将释放。
新建文件:
编写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函数的模式,看下图:
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()) #打印指针位置
技能需求:
1. 文件操作
2. 字符串的分割操作
3. 字典操作
功能需求:词频统计
1. 读取song.txt文件
2. 分析文件中的每一个单词,统计每个单词出现的次数。{“hello”:2, “python”:1, “java”:1}
split()函数默认以空格为分隔符
d = {}
with open('doc/song.txt') as f:
content = f.read()
words = content.split()
# print(words)
for item in words:
if item not in d:
d[item] = 1
else:
d[item] +=1
#print(d)
import pprint
pprint.pprint(d)
使用pprint模块打印,显示更友好
with open('doc/song.txt') as f:
content = f.read()
words = content.split()
from collections import Counter
count= Counter(words)
result=count.most_common(5)
print(result)
count.most_common(5)用于获取出现次数最多的5个
是管理操作系统的一些方法
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(javascript object notation) 是一种轻量级的数据交换格式。
可能一个项目是由多种语言编写的,比如 c 、python、Java等等,那么怎么把C语言得到的结果传递给python呢?然后python对得到的数据进一步操作呢?
json采用完全独立于语言的文本格式,是一种理想的数据交换语言。易于人们阅读和编写,同时也易于机器解析和生成。(一般用于提升网络传输效率)
python中的集合不能转换成json格式
具体实现:
dump() 表示存储到某一个文件中去,如果不需要存储到文件就使用 dumps()
# 将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)
# 将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文件:
import json
with open('doc/save_json.json') as f: #只读方式打开json文件
py_obj=json.load(f)
print(py_obj,type(py_obj))
运行结果:
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')