Task01 学习笔记

本文介绍了Python中用于文件和目录操作的os与os.path模块,详细阐述了获取工作目录、路径转换、文件属性检查、文件夹创建及删除等常见操作。同时,讲解了shutil模块在文件组织和复制中的应用,以及zipfile模块如何实现zip文件的创建和解压。通过实例展示了如何利用这些功能生成州首府选择题,并保存为试题文件和答案文件。
摘要由CSDN通过智能技术生成

文件读写

os包命令

下表总结了os包常用的命令:

  1. 工作目录相关命令
命令功能
os.getcwd()获取当前工作目录
os.chdir()改变当前工作目录
  1. 路径操作命令(实际上是对路径字符串的操作)
命令功能
os.path.abspath(path)将相对路径转换为绝对路径
os.path.isabs(path)判断是否为绝对路径
os.path.relpath(path,start)返回从start到path的相对路径
os.path.dirname(path)返回当前路径的目录名称
os.path.basename(path)返回当前路径的文件名称
os.path.split(FilePath)返回由目录名和文件名组成的元组
os.path.exists(path)判断是否存在path文件/文件夹
os.path.isfile(path)判断是否存在path文件
os.path.isdir(path)判断是否存在path文件夹
  1. 文件及文件夹操作
命令功能
os.makedir(newpath)创建新文件夹
os.path.getsize(path)返回path中文件的字节数
os.listdir(path)返回path中的文件/文件夹列表
  1. 永久删除文件和文件夹
命令功能
os.unlink(path)删除path处的文件
os.rmdir(path)删除path处的文件夹
os.rmtree(path)删除path处的文件夹(包括其中的文件和文件夹)

永久删除的文件无法从回收站恢复,因此可以考虑使用send2trash模块安全地删除文件。

变量存储

利用shelve模块可以将Python变量保存至二进制的shelf文件。shelf以类似字典的方式储存变量。

此外,可以结合pprint.pformat()函数将变量写入.py文件中,之后以模块的形式调用该变量。

组织文件

shutil模块

shutil模块中的函数可以在Python程序中复制、移动、改名和删除文件。

命令功能
shutil.copy(source, destination)将source处的文件复制到路径destination处的文件夹
shutil.copytree(source, destination)将source处的文件夹复制到路径destination处的文件夹
shutil.move(source, destination)将source处的文件/文件夹移动到路径destination

zipfile模块

zipfile模块中的函数可以创建和解压zip文件。

命令功能
zipfile.ZipFile(‘filename.zip’, ‘w’)以写模式创建一个压缩文件
newZip.write(‘filename’,‘compress_type=zipfile.ZIP_DEFLATED’)压缩指定路径的文件,添加到zip文件中
newZip.extractall(path)从zip文件中解压所有文件和文件夹,放到指定目录中
newZip.extract(‘filename’, path)将指定单个文件解压到指定路径的文件夹中

练习

1、已有文件以写模式打开,原来的内容会被覆盖。

2、read()将文件的全部内容读取为一个字符串,而readlines()则会逐行读取文件内容并形成字符串列表(字符串后保留换行符)。

综合练习

import random
import os

# 各州首府字典
capitals = {
    'Alabama': 'Montgomery', 
    'Alaska': 'Juneau', 
    'Arizona': 'Phoenix',
    'Arkansas': 'Little Rock', 
    'California': 'Sacramento', 
    'Colorado': 'Denver',
    'Connecticut': 'Hartford', 
    'Delaware': 'Dover', 
    'Florida': 'Tallahassee',
    'Georgia': 'Atlanta', 
    'Hawaii': 'Honolulu', 
    'Idaho': 'Boise', 
    'Illinois':'Springfield', 
    'Indiana': 'Indianapolis', 
    'Iowa': 'Des Moines', 
    'Kansas':'Topeka', 
    'Kentucky': 'Frankfort', 
    'Louisiana': 'Baton Rouge', 
    'Maine':'Augusta', 
    'Maryland': 'Annapolis', 
    'Massachusetts': 'Boston', 
    'Michigan':'Lansing', 
    'Minnesota': 'Saint Paul', 
    'Mississippi': 'Jackson', 
    'Missouri':'Jefferson City', 
    'Montana': 'Helena', 
    'Nebraska': 'Lincoln', 
    'Nevada':'Carson City', 
    'New Hampshire': 'Concord', 
    'New Jersey': 'Trenton', 
    'New Mexico': 'Santa Fe', 
    'New York': 'Albany', 
    'North Carolina': 'Raleigh',
    'North Dakota': 'Bismarck', 
    'Ohio': 'Columbus', 
    'Oklahoma': 'Oklahoma City',
    'Oregon': 'Salem', 
    'Pennsylvania': 'Harrisburg', 
    'Rhode Island': 'Providence',
    'South Carolina': 'Columbia', 
    'South Dakota': 'Pierre', 
    'Tennessee':'Nashville', 
    'Texas': 'Austin', 
    'Utah': 'Salt Lake City', 
    'Vermont':'Montpelier', 
    'Virginia': 'Richmond', 
    'Washington': 'Olympia', 
    'West Virginia': 'Charleston', 
    'Wisconsin': 'Madison', 
    'Wyoming': 'Cheyenne'
}

cap_state = list(capitals.keys())
cap_capital = list(capitals.values())

# 生成试题文件夹
os.makedirs('C:\\Users\\LWKM\\Desktop\\OfficeAutomation\\Task01 实验\\my_test_all')
os.makedirs('C:\\Users\\LWKM\\Desktop\\OfficeAutomation\\Task01 实验\\my_test_all\\my_problems')
os.makedirs('C:\\Users\\LWKM\\Desktop\\OfficeAutomation\\Task01 实验\\my_test_all\\my_answers')

# 生成试题集(含答案)
n_stu = 35
for i in range(n_stu):
    # 生成题目字典
    my_test = {}
    select = ['A', 'B', 'C', 'D'] # 选项编号
    # 遍历首府字典
    for key,values in capitals.items():
        # 生成选项列表
        choice = [values]
        temp = cap_capital.copy() # 注意copy的使用
        temp.remove(values)
        # 随机抽取3个非正确答案,填入选项列表中
        choice.extend(random.sample(temp,3))
        # 打乱顺序
        random.shuffle(choice)
    
        # 填入试题
        my_test[key] = dict(zip(choice,select)) # 这里换一下顺序,方便答案的生成
    
    # 打乱试题顺序
    new_state = cap_state.copy() # 防止原始州列表顺序被打乱
    random.shuffle(new_state)
    # 写入新试题
    my_test_new = {}
    my_answer_new = {}
    for st in new_state:
        my_test_new[st] = my_test[st]
        my_answer_new[st] = capitals[st]
    
    with open(f'C:\\Users\\LWKM\\Desktop\\OfficeAutomation\\Task01 实验\\my_test_all\\my_problems\\student_{i+1}.txt', 'w') as f:
        t = 0
        for key, values in my_test_new.items():
            t += 1
            f.write(f"{t}. The capital of {key} is ____\n")
            for k,v in values.items():
                f.write(v+'. '+k+'\n')
            f.write('\n')
    
    with open(f'C:\\Users\\LWKM\\Desktop\\OfficeAutomation\\Task01 实验\\my_test_all\\my_answers\\student_{i+1}_answer.txt', 'w') as f:
        s = 0
        for key, values in my_answer_new.items():
            s += 1
            #f.write(f"{s}. The capital of {key} is [ {my_test_new[key][values]} ]")
            f.write(f"{s}. {my_test_new[key][values]}")
            f.write('\n')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值