Python编程快速上手-第八章

文件路径

import os
path = os.path.join('c:\\','user','python')
file_name_dir = os.path.join(path,file_name)

os.getcwd() / os.chdir() / os.makedirs() /

os.getcwd():获取当前工作目录
os.chdir:改变当前工作目录
os.makedirs():创建目录

绝对路径/相对路径

os.path.abspath(path):返回path的绝对路径
os.path.isabs(path):查询是否为绝对路径 返回True

获取路径和文件名

os.path.dirname(path)
os.path.basename(path)

获取文件大小

os.path.getsize()

例子

注意:
通过每一级print可以看到过程
os.listdir(path):命令在os模块中,而不是path模块中
os.path.exists(path) :判断文件或路径存是否存在

import os

path = 'C:\\python\\file1'
# print(path)
if os.path.exists(path):            #判断路径是否存在
    file_names = os.listdir(path) #获取文件目录下的文件名列表

    # print(file_names)
    size = 0
    for file_name in file_names:
        # print(file_name)
        file_name_path = os.path.join(path,file_name) #获得最终的路径
        # print(file_name_path)
        size += os.path.getsize(file_name_path)
    print(size)

os.path.dirname(Path)
os.path.basename(Path)

项目:生成随机的测验试卷文件
第一次写


'''
假如你是一位地理老师,班上有35 名学生,你希望进行美国各州首府的一个
小测验。不妙的是,班里有几个坏蛋,你无法确信学生不会作弊。你希望随机调整
问题的次序,这样每份试卷都是独一无二的,这让任何人都不能从其他人那里抄袭
答案


'''

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

#创建35分试卷、答案

dir_path = 'c:\\python\\file'
for paper_number in range(60):
    exam_paper_path = os.path.join(dir_path,'paper number%s.txt' %(paper_number))
    answer_paper_path = os.path.join(dir_path,'answer number%s.txt'%(paper_number))
    # print(type(exam_paper_path))
    # print(exam_paper_path)
    # print(answer_paper_path )
    exam_paper = open(exam_paper_path,'w')
    answer_paper = open(answer_paper_path,'w')
    exam_paper.write('\n\ngrade:\nclass:\t\t\t\tname:\n'.ljust(50))
    #循环创建50个题
    states = list(capitals.keys())
    random.shuffle(states)
    for ques_num in range(len(capitals)):
        question = states.pop()
        right_answer = capitals[question]
        temp_capitals = capitals.copy()
        del temp_capitals[question]
        # print(capitals)
        wrong_answers = random.sample(list(temp_capitals.values()),3)
        answers = [right_answer] + wrong_answers
        random.shuffle(answers)
        # print(answers)
        # print('the %s state\' captail is:( )'%(question))
        # print('\tA.%s B.%s C. %s D. %s'%(answers[0],answers[1],answers[2],answers[3]))
        exam_paper.writelines('\nthe %s state\' captail is:( )\n'%(question))
        exam_paper.writelines('\tA.%s B.%s C. %s D. %s\n'%(answers[0],answers[1],answers[2],answers[3]))
        answer_paper.writelines('number %s answer is %s\n'%(ques_num,question))
    exam_paper.close()
    answer_paper.close()

第二次写

import logging
import random
import os

logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
'''
假如你是一位地理老师,班上有35 名学生,你希望进行美国各州首府的一个
小测验。不妙的是,班里有几个坏蛋,你无法确信学生不会作弊。你希望随机调整
问题的次序,这样每份试卷都是独一无二的,这让任何人都不能从其他人那里抄袭
答案。当然,手工完成这件事又费时又无聊。好在,你懂一些Python。
'''
#各个州首府的字典
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'}

logging.debug('start of program')
#first creat 50 files for test paper
students =50
dir_path = 'c:\\python\\file'

for student in range(students):
    test_full_path = os.path.join(dir_path,'Test Paper_%s.txt'%(student+1))
    answer_full_path = os.path.join(dir_path,'Answer_%s.txt'%(student+1))
    test_paper = open(test_full_path,'w+')
    answer_paper = open(answer_full_path,'w')
    # logging.debug('the path is %s'%os.path.join(dir_path,'Test Paper_%s.txt'%(student+1)))
    # logging.debug('the file is exist = %s'%(os.path.exists(os.path.join(dir_path,'Test Paper_%s.txt'%(student+1)))))
    #file creat done, print student info
    test_paper.writelines('class:\t\tname:\n\tage:\n')
    #student info completed,now print question and answer
    states = list(capitals.keys())
    random.shuffle(states)
    # logging.debug('the states is %s'%states)
    
    for state in states: #state is the question
        right_answer = capitals[state]
        states.remove(state)
        capitals_copy = capitals.copy()
        del capitals_copy[state]
        answers = random.sample(list(capitals_copy.values()),3) + [right_answer]
        logging.debug('%s\'s captial is %s should in %s'%(state,right_answer,answers))
        random.shuffle(answers)
        #we get the question(state) and answers, but the right answer is the last one, 
        # we should random answers and print it to test_paper
        test_paper.write('which is %s\' capital. ( ) \n'%state)
        answer_paper.write(right_answer)      
        for i in range(4):
            test_paper.write('%s.%s\n'%(['A','B','C','D'][i],answers[i]))
    test_paper.close()
    answer_paper.close()

第三次写

import logging
import random
import os
import datetime


'''
假如你是一位地理老师,班上有35 名学生,你希望进行美国各州首府的一个
小测验。不妙的是,班里有几个坏蛋,你无法确信学生不会作弊。你希望随机调整
问题的次序,这样每份试卷都是独一无二的,这让任何人都不能从其他人那里抄袭
答案。当然,手工完成这件事又费时又无聊。好在,你懂一些Python。
'''
#各个州首府的字典
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'}
#先生成50个试卷文件,50个答案文件
    #需要的变量,
    #学生数量 student_num
    #试卷文件路径   path
    #试卷文件名 test_paper_1,生成的文件名有序号,所以循环 len()比较好
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s')
student_num = 50
path = 'c:\\python\\file\\'
for file_num in range(student_num):
    test_paper = open((path + 'test_paper_%s.txt'%(file_num+1)),'w')
    answer_paper = open((path + 'answer_%s.txt'%(file_num+1)),'w')
    test_paper.write('class:\t\tname:\n')
#生成测试题
    #问题关键字 州名字 states[ques_num]
    #题号 ques_num 需要用到题号,使用len()比较好
    #正确答案 right_answer
    #选择项 options 三个错误答案 + 正确答案
    states = list(capitals.keys())
    random.shuffle(states)
    
    
    for ques_num in range(len(states)):
        answers = list(capitals.values())
        # logging.debug(len(answers))
        right_answer = capitals[states[ques_num]]
        answers.remove(right_answer)
        # logging.debug(len(answers))
        options = random.sample(answers,3) + [right_answer]
        # logging.debug(len(options))
        random.shuffle(options)
        # logging.debug(options)
        test_paper.write('\n%s.which is the captain of %s\n\n'%((ques_num+1),states[ques_num]))
        for i in range(4):
            test_paper.write('%s,%s\n'%(['A','B','C','D'][i],options[i]))
        answer_paper.write('%s-%s\n'%(ques_num+1,['A','B','C','D'][options.index(capitals[states[ques_num]])]))


logging.debug('file exited %s'%(os.path.exists((path + 'test_paper_%s.txt'%(student_num)))))
'''
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容