文章目录

  • 1. 文件的基本操作
  • 1.1 文件的打开 open()
  • 1.1.1 读文件 r
  • 1.1.2 写文件 w(清空原文件内容)
  • 1.1.3 写文件 a(追加原文件内容)
  • 1.2 文件的关闭 close()
  • 1.2.1 with语句工作原理
  • 1.2.2 seek语句工作原理
  • 1.2.3 tell语句的工作原理
  • 1.2.4 实例
  • 2. os模块
  • 2.1 关于操作系统
  • 2.2 关于路径
  • 2.3 关于文件和目录的操作
  • 2.4 练习:文件批量重命名
  • 3. JSON模块
  • 3.1 python类型数据和JSON数据格式互相转换规则
  • 3.2 python对象编码成JSON字符串
  • 3.3 将JSON字符串解码成python对象
  • 4. 存储为excel文件


1. 文件的基本操作

  • 先在当前目录下创建一个hello.txt文件

1.1 文件的打开 open()

  1. open函数的定义
  2. python open保存为文件 python os保存文件_后端

  3. 文件的操作
  4. python open保存为文件 python os保存文件_python_02

  5. 文件的打开模式
    (先判断读,还是写,还是读写)
  6. python open保存为文件 python os保存文件_json_03

    python open保存为文件 python os保存文件_后端_04

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(清空原文件内容)

  1. 错误案例
# 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()
  1. 正确案例(注意此时不能读
    清空原文件的内容,重新写入新的内容
# 正确案例:
# 2-1). 打开文件
f = open('doc/hello.txt', mode='w')     # 赋予写权限,注意此时不能读

# 2-2). 文件写操作
f.write('java\n')       # java, 清空原文件的内容,重新写入新的内容

# 2-3). 关闭文件
f.close()

python open保存为文件 python os保存文件_开发语言_05

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()

python open保存为文件 python os保存文件_开发语言_06

1.2.1 with语句工作原理

python open保存为文件 python os保存文件_开发语言_07

1.2.2 seek语句工作原理

设置指针的移动方向
	f.seek(0, 0)		# 移动指针到文件的最开始
	f.seek(0, 2)		# 移动指针到文件的最末尾

python open保存为文件 python os保存文件_python open保存为文件_08

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模块

python open保存为文件 python os保存文件_python_09

2.1 关于操作系统

  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')
  1. try语句(异常捕获
  • try:可能出现报错的代码
  • except:如果异常
  • finally:是否异常,都会执行的内容
try:                # 可能出现报错的代码时,使用try
    uname = os.uname()
except Exception:   # 如果出现异常,则执行此条代码
    uname = platform.uname()
finally:
    print(uname)    # 是否有异常,都会执行的内容
  1. 获取系统的环境变量
# 系统环境变量
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')

python open保存为文件 python os保存文件_json_10

# 2-6). rename() 对文件重命名
NEW_FILENAME = os.rename('apple.conf', 'banana.conf')

python open保存为文件 python os保存文件_json_11

# 2-7). remove() 对文件删除
os.remove('banana.conf')

python open保存为文件 python os保存文件_开发语言_12

2.3 关于文件和目录的操作

  1. 创建目录/删除目录
# 3. 关于文件和目录的操作
# 3-1). 创建目录/删除目录
os.makedirs('furits/apple')
os.mkdir('vegetable')
# 删除
os.rmdir('furits/apple')
os.rmdir('furits')
os.rmdir('vegetable')

python open保存为文件 python os保存文件_json_13

  1. 创建文件/删除文件
# 3-2). 创建文件/删除文件
# Windows系统不支持使用mknod
# 可以通过拼接join的方式创建文件
  1. 文件重命名
# 3-3). 文件重命名
os.rename('banana.conf', 'orange.conf')
  1. 判断文件或者目录是否存在
# 3-4). 判断文件或者目录是否存在
print(os.path.exists('orange.conf'))    # True
  1. 分离后缀名和文件名
# 3-5). 分离后缀名和文件名
print(os.path.splitext('orange.conf'))  # ('orange', '.conf')
print(os.path.split('orange.conf'))     # ('', 'orange.conf')
  1. 将目录名和文件名分离
# 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 练习:文件批量重命名

python open保存为文件 python os保存文件_python open保存为文件_14

3. JSON模块

  • 每种语言都可以读懂 JSON

3.1 python类型数据和JSON数据格式互相转换规则

python open保存为文件 python os保存文件_后端_15

python open保存为文件 python os保存文件_json_16

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'>

python open保存为文件 python os保存文件_开发语言_17

python open保存为文件 python os保存文件_后端_18

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文件

  1. 安装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
  1. 转换数据类型:将字典转换为二维数组
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
  1. 存储到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

python open保存为文件 python os保存文件_开发语言_19