一、os模块(重要)

os模块主要与操作系统打交道

1.创建目录(文件夹)

import os

os.mkdir(r'a1') # 在执行文件所在的路径下创建单级目录a1
os.mkdir(r'a2\b2\c2') # 不可以创建多级目录 os.makedirs(r'a1') # 可以创建单级目录
os.makedirs(r'a2\b2\c2') # 也可以创建多级目录

2.删除目录(文件夹)

import os

os.rmdir(r'a2') # 可以删除空的单级目录 os.rmdir(r'a2\b2\c2') # 不可以一次性删除多级目录 os.removedirs(r'a2\b2\c2') # 可以删除多级目录,但是只能删除空的多级目录

3.列举指定路径下内容名称


import os

print(os.listdir()) # ['.idea', '01 os模块.py', 'a2', 'bin', 'conf', 'core']

4. 删除/重命名文件

import os

os.rename(r'a.txt', r'aa.txt')    # 将文本文件‘a.txt’重命名为‘aa.txt’

os.remove(r'aa.txt')    # 删除文本文件‘aa.txt'

5. 获取/切换当前工作目录

import os

print(os.getcwd()) # 获取当前工作目录 D:\pythonProject\modules os.chdir('..') # 切换到上一级目录
print(os.getcwd()) # D:\pythonProject
os.mkdir(r'b') # 在D:\pythonProject目录下创建文件夹b D:\pythonProject\b

6. 动态获取项目根路径(重要)

import os

print(os.path.abspath(__file__))    # 获取执行文件的绝对路径(带自己)  D:\pythonProject\modules\01 os模块.py

print(os.path.dirname(__file__))    # # 获取执行文件所在的目录路径(不带自己)  D:/pythonProject/modules

7. 判断路径是否存在(文件、文件夹)

import os

print(os.path.exists(r'01 os模块.py'))    # 判断文件路径是否存在 True
print(os.path.exists(r'D:\pythonProject\modules'))    # 判断文件夹路径是否存在 True
print(os.path.isfile(r'01 os模块.py'))    # 判断路径是否是文件  True
print(os.path.isfile(r'D:\pythonProject\modules'))    # 判断路径是否是文件  False

print(os.path.isdir(r'01 os模块.py'))    # 判断路径是否是文件夹  False
print(os.path.isdir(r'D:\pythonProject\modules')) # 判断路径是否是文件夹 True

8. 路径拼接(重要)

import os

s1 = r'D:/pythonProject/modules'
s2 = r'01 os模块.py'
print(os.path.join(s1, s2)) # 将s1与s2的路径拼接到一起 D:/pythonProject/modules\01 os模块.py

9. 获取文件大小(字节)

import os

print(os.path.getsize(r'01 os模块.py'))    # 1963

实战案例:

# D:\pythonProject\modules\core\src.py  在core文件夹创建一个函数

def register():
print('注册功能') def login():
print('登录功能') def shopping():
print('购物功能') func_dict = {
'1':register,
'2':login,
'3':shopping
} def run():
while True:
print("""
1.注册功能
2.登录功能
3.购物功能
""")
choice = input('功能编号>>>:').strip()
if choice in func_dict:
func_dict.get(choice)()
else:
print('您要的功能编号不存在') # D:\pythonProject\modules\bin\start.py from core import src # 从core文件夹导入src模块到bin文件夹下的启动文件start.py
if __name__ == '__main__':
src.run() # 调用函数,可以正常运行

如果将该项目打包给另一个人,该项目的保存路径可能会发生变化,直接运行执行文件可能会出错,需要动态获取项目根路径。

优化(启动文件中需添加新设备上项目所在路径):

import os
import sys base_dir = os.path.dirname(__file__) # 获取新设备上执行文件所在路径
base_dir = os.path.dirname(os.path.dirname(__file__)) # 嵌套获取上一层路径
sys.path.append(base_dir) # 添加项目目录到系统路径 from core import src
if __name__ == '__main__':
src.run()

二、 sys模块

sys模块主要与Python解释器打交道。

1.  获取执行文件的sys.path

import sys

print(sys.path)    # 获取执行文件的sys.path

2. 获取python解释器默认最大递归深度

import sys

print(sys.getrecursionlimit())  # 获取python解释器默认最大递归深度

3. 修改python解释器默认最大递归深度

import sys

sys.setrecursionlimit(2000)  # 修改python解释器默认最大递归深度

4. 获取解释器版本

import sys

print(sys.version)    # 3.8.6 (tags/v3.8.6:db45529, Sep 23 2020, 15:52:53) [MSC v.1927 64 bit (AMD64)]

5. 获取平台信息

import sys

print(sys.platform)   # win32

6.  sys.argv

lst = sys.argv   # 在终端中模拟input输入,避免input函数阻塞

三、json模块

json模块:也称为序列化模块,序列化可以打破语言限制实现不同编程语言之间数据交互。

json格式数据的形式:字符串类型,引号为双引号

d = {'name' : 'Alex' , 'pwd': 123}
print(d, type(d)) # {'name': 'Alex', 'pwd': 123} <class 'dict'> import json
res = json.dumps(d)
print(res, type(res)) # {"name": "Alex", "pwd": 123} <class 'str'>

jason相关操作:

import json

# 结合数据一起使用
json.dumps() # 序列化 将数据转化为json格式
json.loads() # 反序列化 将json格式字符串转化为某一个对应格式类型 # 结合文件一起使用
json.dump(user_dict, f) # 将数据转化为json格式,并写到文件里面去
json.load(f) # 读取文件中json格式数据并反序列化成数据类型

案例1:

将字典写入文件,并且取出来还是字典
d = {'name' : 'Alex' , 'pwd': 123}

方法1:
import json

d = {'name': 'Alex', 'pwd': 123}
with open(r'a.txt','w', encoding = 'utf8') as f:
json_str = json.dumps(d) # 将字典格式转化为json字符串
f.write(json_str) # 将json字条串写入文件 with open(r'a.txt', 'r', encoding = 'utf8') as f:
json_str = f.read() # 读取文件中json格式的字符串
json_dict = json.loads(json_str) # 将json格式的字符串转化为字典
print(json_dict, type(json_dict)) # {'name': 'Alex', 'pwd': 123} <class 'dict'>

方法2:

import json

d = {'name': 'Alex', 'pwd': 123}
with open(r'a.txt','w', encoding = 'utf8') as f:
json.dump(d,f) # 将字典转换成json格式字符串并写入文件
"""
等价于>>>
json_str = json.dumps(d)
f.write(json_str)
""""
with open(r'a.txt', 'r', encoding = 'utf8') as f:
res = json.load(f) # 将文件中的json格式字符串读取出来并转化成字典
"""
等价于>>>
json_str = f.read()
json_dict = json.loads(json_str)
"""
print(res) # {'name': 'Alex', 'pwd': 123} <class 'dict'>

案例2:

将文件中的多行json格式数据读取出来转成字典格式:

文件中的数据:

{"name": "Alex", "pwd": 111}
{"name": "Bob", "pwd": 222}
{"name": "Cindy", "pwd": 333}
import json

with open(r'a.txt', 'r', encoding = 'utf8') as f:
for line in f:
print(json.loads(line))

注:一般情况下,json数据是以单文件储存,不会出现一个文件中出现多个用户数据的情况。

jsaon模块实战:

1. 先用json模块实现用户注册

# # 获取或创建文件路径和文件夹
import json
import os
# 1.获取执行文件所在的目录路径
base_dir = os.path.dirname(__file__)
# print(base_dir) # D:/pythonProject/modules # 2.拼接出db目录的路径
db_dir = os.path.join(base_dir, 'db')
# print(db_dir) # D:/pythonProject/modules/db # 3.创建db目录
if not os.path.isdir(db_dir):
os.mkdir(db_dir) ## 注册用户
# 4.获取用户名和密码
username = input('username>>>:')
password = input('password>>>:') # 4.1判断用户名是否已存在,两种方法:
# 方法1:将输入的用户名转化成用户文件格式,与os.listdir(db_dir)作对比
format_name = f'{username}.json'
if format_name in os.listdir(db_dir): # os.listdir(db_dir)是一个用户信息组成的列表 ['alex.json', 'bob.json', 'cindy.json']
print('用户名已存在') # 方法2:拼接存储用户数据的文件路径,看看是否已经存在
user_file_path = os.path.join(db_dir, f'{username}.json')
if os.path.exists(user_file_path):
print('用户名已存在') # 5.构造用户字典
user_dict = {
'username': username,
'password': password,
'account': 15000,
'shop_car':[]
} # 6.写入文件数据
with open(user_file_path, 'w', encoding = 'utf8') as f:
json.dump(user_dict,f)

2. 基于上述用户实现用户登录

import json
import os
# 1.获取执行文件所在的目录路径
base_dir = os.path.dirname(__file__)
# print(base_dir) # D:/pythonProject/modules # 2.拼接出db目录的路径
db_dir = os.path.join(base_dir, 'db')
# print(db_dir) # D:/pythonProject/modules/db # 3.创建db目录
if not os.path.isdir(db_dir):
os.mkdir(db_dir) # 登录功能
# 4.输入用户名并判断用户名是否存在
username = input('username>>>:')
# 4.1 拼接上述用户名组成的文件路径
target_user_file_path = os.path.join(db_dir, f'{username}.json') # 4.2 判断用户名是否已经存在
if not os.path.exists(target_user_file_path):
print('用户名错误')
else:
password = input('password>>>:').strip() # 5.获取用户真实数据字典,对比用户密码是否正确
with open(target_user_file_path, 'r', encoding = 'utf8') as f:
real_user_dict = json.load(f)
if password == real_user_dict.get('password'):
print('登录成功')
else:
print('密码错误')

os与sys模块,json模块的更多相关文章

  1. os、sys、json、subprocess模块

    今日内容概要 1.os模块 2.sys模块 3.json模块 4.subprocess模块 今日内容详细 os模块 """该模块主要是跟操作系统打交道"&quo ...

  2. python之模块(os、sys、json、subprocess)

    目录 os模块 sys模块 json模块 subprocess模块 os模块 os模块主要是与操作系统打交道. 导入os模块 import os 创建单层文件夹,路径必须要存在 os.mkdir(路径 ...

  3. Python基础之模块:3、os模块 sys模块 json模块 json实战

    目录 一.os模块 1.创建目录 2.删除目录 3.查看指定路径下目录内容 4.删除/重命名文件 5.获取/切换当前目录 6.动态获取项目根路径 7.拼接/切割路径 8.判断文件.目录是否存在 9.判 ...

  4. Python之常用模块(re,时间,random,os,sys,序列化模块)(Day20)

    一.时间模块 #常用方法 1.time.sleep(secs) (线程)推迟指定的时间运行.单位为秒. 2.time.time() 获取当前时间戳 在Python中表示时间的三种方式:时间戳,元组(s ...

  5. python 常用模块(一): os模块,序列化模块(json模块 pickle模块 )

    1.os模块 2.序列化模块:(1)json模块 和 pickle模块 一.os模块 os.path.abspath: (1)把路径中不符合规范的/改成操作系统默认的格式 import os path ...

  6. python 正则,os,sys,hashlib模块

    简单的小算法 random随机获取数据 import random def getrandata(num): a=[] i= while i<num: a.append(random.randi ...

  7. sys模块&json模块&pickle模块

    sys模块&json模块&pickle模块 sys模块 一.导入方式 import sys 二.作用 与Python解释器交互 三.模块功能 3.1 经常使用 sys.path #返回 ...

  8. Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式

    Python第十四天 序列化  pickle模块  cPickle模块  JSON模块  API的两种格式 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Py ...

  9. 023--python os、sys、json、pickle、xml模块

    一.os模块 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 >>> os.getcwd() 'C:\\Python36' os.chdir(&quo ...

  10. python基础--常用的模块(collections、time、datetime、random、os、sys、json、pickle)

    collection模块: namedtuple:它是一个函数,是用来创建一个自定义的tuple对象的,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素.所以我们就可以 ...

随机推荐

  1. 升级Gogs版本

    今天早上收到阿里云发的报警短信,大致内容如下: 前提分析: 公司代码代码仓库使用是Gogs搭建的,版本是0.11.34,二进制方式安装的,连接的是其他主机上的MySQL数据库,因此被检测到有这个漏洞 ...

  2. 高光谱图像分类简述+《Deep Learning for Hyperspectral Image Classification: An Overview》综述论文笔记

    论文题目<Deep Learning for Hyperspectral Image Classification: An Overview> 论文作者:Shutao Li, Weiwei ...

  3. 记一次批量更新整型类型的列 → 探究 UPDATE 的使用细节

    开心一刻 今天,她给我打来电话 她:你明天陪我去趟医院吧 我:怎么了 她:我怀孕了,陪我去打胎 我:他的吗 她:嗯 我心一沉,犹豫了片刻:生下来吧,我养! 她:他的孩子,你不配养! 我:我随孩子姓 需 ...

  4. 银河麒麟安装node,mysql,forever环境

    这就是国产银河系统的界面,测试版本是麒麟V10 链接: https://pan.baidu.com/s/1_-ICBkgSZPKvmcdy1nVxVg 提取码: xhep 一.传输文件 cd /hom ...

  5. python-数据描述与分析2(利用Pandas处理数据 缺失值的处理 数据库的使用)

    2.利用Pandas处理数据2.1 汇总计算当我们知道如何加载数据后,接下来就是如何处理数据,虽然之前的赋值计算也是一种计算,但是如果Pandas的作用就停留在此,那我们也许只是看到了它的冰山一角,它 ...

  6. 8_vue是如何进行数据代理的

    在了解了关于js当中的Object.defineProperty()这个方法后,我们继续对vue当中的数据代理做一个基于现在的解析 建议观看之前先了解下js当中的Obejct.defineProper ...

  7. 最长不下降子序列(线段树优化dp)

    最长不下降子序列 题目大意: 给定一个长度为 N 的整数序列:A\(_{1}\),A\(_{2}\),⋅⋅⋅,A\(_{N}\). 现在你有一次机会,将其中连续的 K 个数修改成任意一个相同值. 请你 ...

  8. String常用API

    String常用API 1. 获取字符串长度 int length = str.length(); 2. 根据索引,返回字符串中对应的字符 char c = str.chaeAt(length-1); ...

  9. AGC007C Pushing Balls —— 期望的神题

    Problem Link 题意: 序列上按顺序交错有 \(n\) 个球和 \(n+1\) 个洞,即 \(hole_1,ball_1,hole_2,ball_2,\dots,ball_n,hole_{n ...

  10. windows socket网络编程--事件选择模型

    目录 事件选择模型概述 API详解 工作原理 代码实现 事件选择模型概述 Winsock提供了另一种有用的异步事件通知I/O模型--WSAEventSelect模型.这个模型与WSAAsyncSele ...