1. 文件的基本操作
- 先在当前目录下创建一个hello.txt文件
1.1 文件的打开 open()
-
open函数的定义
-
文件的操作
-
文件的打开模式
(先判断读,还是写,还是读写)
1.1.1 读文件 r
# 文件的基本操作
# 1. 读操作
# 1-1). 打开文件
f = open('doc/hello.txt')
# 1-2). 文件读操作
print(f.read())
# hello
# westos
# 1-3). 关闭文件
f.close()
1.1.2 写文件 w(清空原文件内容)
- 错误案例
# 2. 写操作
# 错误案例:
# 2-1). 打开文件
f = open('doc/hello.txt')
# 2-2). 文件写操作
print(f.read())
f.write('java\n') # 报错:没有写权限
# io.UnsupportedOperation: not writable
# 2-3). 关闭文件
f.close()
- 正确案例(注意此时不能读)
清空原文件的内容,重新写入新的内容
# 正确案例:
# 2-1). 打开文件
f = open('doc/hello.txt', mode='w') # 赋予写权限,注意此时不能读
# 2-2). 文件写操作
f.write('java\n') # java, 清空原文件的内容,重新写入新的内容
# 2-3). 关闭文件
f.close()
1.1.3 写文件 a(追加原文件内容)
# 3. 读写文件
# 3-1). 打开文件
f = open('doc/hello.txt', mode='a')
# 3-2). 文件读写操作
f.write('python\n')
# 3-3). 关闭文件
f.close()
1.2 文件的关闭 close()
1.2.1 with语句工作原理
1.2.2 seek语句工作原理
设置指针的移动方向
f.seek(0, 0) # 移动指针到文件的最开始
f.seek(0, 2) # 移动指针到文件的最末尾
1.2.3 tell语句的工作原理
f.tell() # 返回指针的位置
1.2.4 实例
- 假如不使用seek语句,
此时,指针指向文件末尾(13),f.read()会从当前位置开始读,
所以,此时是没有任何输出的
- 使用seek语句
指针指向文件的开头,此时打印的数据从当前指针位置开始
# with语句 seek语句 tell语句
with open('doc/hello.txt', 'w+') as f:
# w+ : 清空再写入数据
f.write('hello world\n') # 写入文件
f.seek(0, 0) # 移动指针到文件的最开始
# 0: 表示文件开头
print('当前指针的位置:', f.tell()) # 当前指针的位置: 0
print(f.read()) # 读取文件内容
f.seek(0, 2) # 从文件开始的位置移动到文件末尾的位置
# 2: 表示文件末尾
print('当前指针的位置:', f.tell()) # 当前指针的位置: 13
# 执行结果
# 当前指针的位置: 0
# hello world
#
# 当前指针的位置: 13
2. os模块
2.1 关于操作系统
- 获取主机信息
- 注意:Windows系统通过platform模块获取系统的uname信息
import os
print(os.name)
# print(os.uname()) # 报错:AttributeError: module 'os' has no attribute 'uname'
# Windows不支持os.uname
# 获取主机信息,Windows系统使用platform模块
# 如果是Linux系统,使用os模块
import platform
print(platform.uname())
# uname_result(system='Windows', node='LAPTOP-0VVRF0MM', release='10', version='10.0.19041', machine='AMD64')
- try语句(异常捕获)
- try:可能出现报错的代码
- except:如果异常
- finally:是否异常,都会执行的内容
try: # 可能出现报错的代码时,使用try
uname = os.uname()
except Exception: # 如果出现异常,则执行此条代码
uname = platform.uname()
finally:
print(uname) # 是否有异常,都会执行的内容
- 获取系统的环境变量
# 系统环境变量
print(os.environ)
# 通过key值获取环境变量对应的value值
print(os.environ.get('PATH'))
print(os.getenv('PATH'))
2.2 关于路径
# 2. 关于路径
# 2-1). 判断是否为绝对路径
print(os.path.isabs('doc/hello.txt')) # False
print(os.path.isabs('hello.txt')) # False
# 2-2). 生成绝对路径
print(os.path.abspath('doc/hello.txt')) # E:\pythonProject1\2021-11-28-python_study\day05\doc\hello.txt
# 2-3). 返回一个绝对路径:当前目录的绝对路径 + 文件名/目录名
print(os.path.join('E:\pythonProject1', 'hello.txt')) # E:\pythonProject1\hello.txt
# 2-4). 获取目录名或者文件名
filename = 'E:\pythonProject1\2021-11-28-python_study\day05\doc\hello.txt'
# 获取文件名
print(os.path.basename(filename)) # hello.txt
# 获取文件的目录名
print(os.path.dirname(filename)) # E:\pythonProject1\2021-11-28-python_study\day05\doc
# 2-5). 目录名和文件名拼接 (生成新的文件)
# os.path.dirname() 获取某个文件对应的目录名
# __file__ 当前文件
# join拼接,将目录名和文件名拼接起来
BASE_DIR = os.path.dirname(__file__) # 打印当前文件的绝对路径
print(BASE_DIR) # E:\pythonProject1\2021-11-28-python_study\day05
setting_file = os.path.join(BASE_DIR, 'apple.conf')
print(setting_file) # E:\pythonProject1\2021-11-28-python_study\day05\apple.conf
with open(setting_file, 'w') as f:
f.write('apple')
# 2-6). rename() 对文件重命名
NEW_FILENAME = os.rename('apple.conf', 'banana.conf')
# 2-7). remove() 对文件删除
os.remove('banana.conf')
2.3 关于文件和目录的操作
- 创建目录/删除目录
# 3. 关于文件和目录的操作
# 3-1). 创建目录/删除目录
os.makedirs('furits/apple')
os.mkdir('vegetable')
# 删除
os.rmdir('furits/apple')
os.rmdir('furits')
os.rmdir('vegetable')
- 创建文件/删除文件
# 3-2). 创建文件/删除文件
# Windows系统不支持使用mknod
# 可以通过拼接join的方式创建文件
- 文件重命名
# 3-3). 文件重命名
os.rename('banana.conf', 'orange.conf')
- 判断文件或者目录是否存在
# 3-4). 判断文件或者目录是否存在
print(os.path.exists('orange.conf')) # True
- 分离后缀名和文件名
# 3-5). 分离后缀名和文件名
print(os.path.splitext('orange.conf')) # ('orange', '.conf')
print(os.path.split('orange.conf')) # ('', 'orange.conf')
- 将目录名和文件名分离
# 3-6). 将目录名和文件名分离
print(os.path.split('E:\pythonProject1\2021-11-28-python_study\day05\doc\hello.txt'))
# ('E:\\pythonProject1\x821-11-28-python_study\\day05\\doc', 'hello.txt')
2.4 练习:文件批量重命名
3. JSON模块
- 每种语言都可以读懂 JSON
3.1 python类型数据和JSON数据格式互相转换规则
3.2 python对象编码成JSON字符串
- json.dump()
- json.dumps()
# python类型数据和JSON数据格式互相转换规则
import json
# 1. python对象编码成JSON字符串
users = {'name':'westos', 'age':21, 'city':'西安'}
json_str = json.dumps(users)
with open('doc/hello.txt', 'w') as f:
# ensure_ascii=False: 中文可以成功存储
# indent=4: 缩进为4个空格
json.dump(users, f, ensure_ascii=False, indent=4)
print('存储成功')
print(json_str, type(json_str))
# 存储成功
# {"name": "westos", "age": 21, "city": "\u897f\u5b89"} <class 'str'>
3.3 将JSON字符串解码成python对象
- json.load()
# 2. 将JSON字符串解码成python对象
with open('doc/hello.txt') as f:
python_obj = json.load(f)
print(python_obj, type(python_obj))
# {'name': 'westos', 'age': 21, 'city': '西安'} <class 'dict'>
4. 存储为excel文件
- 安装pandas模块
# 1. 安装pandas模块
# pip install pandas -i https://pypi.douban.com/simple
# E:\pythonProject1\2021-11-28-python_study>pip install pandas -i https://pypi.douban.com/simple
- 转换数据类型:将字典转换为二维数组
import pandas
hosts = [
{'host':'1.1.1.1', 'hostname':'test1', 'idc':'alibaba'},
{'host':'1.1.1.2', 'hostname':'test2', 'idc':'tencent'},
{'host':'1.1.1.3', 'hostname':'test3', 'idc':'huawei'},
{'host':'1.1.1.4', 'hostname':'test4', 'idc':'alibaba'}
]
# 2. 数据格式转换
# 将字典转换为二维数组
df = pandas.DataFrame(hosts)
print(df)
# host hostname idc
# 0 1.1.1.1 test1 alibaba
# 1 1.1.1.2 test2 tencent
# 2 1.1.1.3 test3 huawei
# 3 1.1.1.4 test4 alibaba
- 存储到excel文件中(需要安装openpyxl模块)
# 3. 存储到excel文件中
# 需要安装openpyxl模块
# E:\pythonProject1\2021-11-28-python_study>pip install openpyxl -i https://pypi.douban.com/simple
df.to_excel('doc/hosts.xlsx')
print('success')
# host hostname idc
# 0 1.1.1.1 test1 alibaba
# 1 1.1.1.2 test2 tencent
# 2 1.1.1.3 test3 huawei
# 3 1.1.1.4 test4 alibaba
# success
全部代码:
# 1. 安装pandas模块
# pip install pandas -i https://pypi.douban.com/simple
import pandas
hosts = [
{'host':'1.1.1.1', 'hostname':'test1', 'idc':'alibaba'},
{'host':'1.1.1.2', 'hostname':'test2', 'idc':'tencent'},
{'host':'1.1.1.3', 'hostname':'test3', 'idc':'huawei'},
{'host':'1.1.1.4', 'hostname':'test4', 'idc':'alibaba'}
]
# 2. 数据格式转换
# 将字典转换为二维数组
df = pandas.DataFrame(hosts)
print(df)
# host hostname idc
# 0 1.1.1.1 test1 alibaba
# 1 1.1.1.2 test2 tencent
# 2 1.1.1.3 test3 huawei
# 3 1.1.1.4 test4 alibaba
# 3. 存储到excel文件中
# 需要安装openpyxl模块
# E:\pythonProject1\2021-11-28-python_study>pip install openpyxl -i https://pypi.douban.com/simple
df.to_excel('doc/hosts.xlsx')
print('success')
# host hostname idc
# 0 1.1.1.1 test1 alibaba
# 1 1.1.1.2 test2 tencent
# 2 1.1.1.3 test3 huawei
# 3 1.1.1.4 test4 alibaba
# success