第11章 2 文件和io操作 +

本章总结和章节选择题 p160

第11章 2 文件和io操作 +_第1张图片
很奇怪,只有先写了列表,在遍历file 才有打印

若文件原来就有内容,w+ open 完之后,文件内容就被清空了


open操作若不指定打开模式,默认打开模式是'r'


文本打开时,是按照字符串
第11章 2 文件和io操作 +_第2张图片

实战一 批量创建文件 p160

补充点:
1、如何将1到3000输出为 0001 到 3000
print('{0:0>4}'.format(2)) 第6章1-字符串及正则表达式 p63

2、随机数如何使用

导入模块
import random
import time
获取当前时间戳 作为随机数的种子
now=time.time() 返回一个浮点数
random.seed(now) now作为浮点数是否可以作为seed的参数?(应该是可以的,程序没报错)也可以不加参数,默认是当前的时间 

randint(a,b)	生成一个[a,b]之间的整数

3、判断路径是否是有效路径?
os.path模块中的isdir(path)方法
引入方法:import os.path

4、如何创建文件?
f=open(‘f.txt’,‘w’) 就是通过open操作


个人编码解答:

import random
import time
import os.path
import os

# 不传参,以当前时间作为随机数种子
random.seed()

def create_file(path):
    # 先判断路径是否合法
    if os.path.isdir(path)==False:
        print(path,'为不合法路径,无法进行创建文件')
        return

    item_lst=['水果','烟酒','粮油','肉蛋','蔬菜']
    # 改变工作目录到path
    os.chdir(path)
    print('当前工作目录为:',os.getcwd())
    # 下面开始批量创建文件
    for i in range(1,3001):
        # 构造文件名字符串
        filename='{0:0>4}_{1}_{2:9x}.txt'.format(i,random.choice(item_lst),random.randint(0,0xfffffffff))
        print(filename)
        with open(filename,'w') as file:
            pass

create_file('E:\斗鱼视频\直播数据')

# 拓展:若路径不存在可以先创建路径,再在此路径下创建文件
# 教程代码
# if __name__=='__main__'

教程解法 + 自己改进(若路径不存在,则先创建路径)

教程解法和自己的解法的主要区别就是:在16进制随机数的生成上,我是通过randint指定范围0到0xfffffffff之间随机,而教程是通过9此循环每次循环随机取以为十六进制数的可能取值

import random
import os
import os.path
import time

def create_filename(path):
    if os.path.isdir(path)==False:
        os.makedirs(path)
    os.chdir(path)
    print('当前的工作路径:',os.getcwd())
    filename_lst=[]
    lst=['水果','烟酒','粮油','肉蛋','蔬菜']
    code=['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']

    for i in range(1,3001):
        filename='{0:0>4}_'.format(i)
        filename+=random.choice(lst)+'_'
        s=''
        for j in range(9):
            s+=random.choice(code)
        filename+=s
        #print(filename)
        # 创建文件
        with open(filename,'w') as file:
            pass

if __name__=='__main__':
    random.seed(time.time())
    create_filename(r'E:\斗鱼视频\直播数据\2')

批量创建文件夹 p161

import os
import os.path

def create_dir(newdir,num):
    if num<=0 or type(num)!=type(1):
        print('输入的个数不符合规范,程序终止退出')
        return

    if os.path.exists(newdir)==False:
        os.makedirs(newdir)

    raw_work_path=os.getcwd()
    print('原工作目录:',raw_work_path)
    os.chdir(newdir)
    print('现工作目录:',os.getcwd())

    for i in range(1,num+1):
        if os.path.exists(str(i))==False:
            os.mkdir(str(i))

    os.chdir(raw_work_path)

if __name__=='__main__':
    create_dir('E:\斗鱼视频\直播数据',5)
    print('文件创建完成')
    print('当前工作路径:',os.getcwd())

实战二 记录登录日志并查看 p162

import time
import os
import os.path


user_dict={'admin':'admin'}

if __name__=='__main__':
    agent_input = input('请输入用户名:')
    password_input = input('请输入密码:')

    res = user_dict.get(agent_input)
    if res == None or res != password_input:
        print('用户名或密码不正确')
    else:
        print('登录成功')
        with open('log.txt', 'a+', encoding='UTF-8') as file:
            login_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime())
            print(login_time)
            file.write('用户名:{0},登录时间:{1}\n'.format(agent_input,login_time))

        while True:
            print('输入提示数字,执行相应操作:0.退出 1.查看登录日志')
            op_num=eval(input('请输入操作数字:'))
            match op_num:
                case 0:
                    print('退出成功')
                    break
                case 1:
                    print('查看登录日志')
                    with open('log.txt', 'r+', encoding='UTF-8') as file:
                        print(file.read())
                case _:
                    print('输入的数字有误,请重新输入')

没什么好补充的,注意复杂操作的函数封装

实战四 模拟淘宝自动回复 p163

import os
import os.path

item_lst=[
    '订单|若您有任何订单问题...',
    '物流|若您有任何物流问题...',
    '账户|若您有任何账户问题...',
    '支付|若您有任何支付问题...'
]
if __name__=='__main__':
    with open('replay.txt','r',encoding='UTF-8') as file:
        lst=file.readlines()

    keyword_lst=[]
    match_flag=False

    for item in lst:
        keyword_lst.append(item[0:2])
    print(keyword_lst)

    ans=input('HI,xxx你好,小蜜在此等主人很久了,有什么烦恼快和小蜜说说吧~')

    while True:
        if ans=='bye':
            print('小主再见')
            break

        for i in range(len(keyword_lst)):
            if keyword_lst[i] in ans:
                print(lst[i][3:])
                match_flag=True

        if match_flag==False:
            ans=input('不知道,推出请输入bye')
        else:
            ans=input('还可以问,推出请输入bye')

没有注意函数的提取
还有一个是readline函数的使用

改善之后:

import os
import os.path

def get_reply(question):
    with open('replay.txt', 'r', encoding='UTF-8') as file:
        s=file.readline()
        while s!='':
            lst=s.split('|')
            keyword=lst[0]
            reply=lst[1]
            print(keyword)
            print(reply)
            if reply in question:
                return reply
            s = file.readline()
    return False

if __name__=='__main__':
    ans=input('HI,xxx你好,小蜜在此等主人很久了,有什么烦恼快和小蜜说说吧~')
    while True:
        if ans=='bye':
            print('小主再见')
            break

        reply=get_reply(ans)
        if reply==False
            ans=input('不知道,推出请输入bye')
        else:
            print(reply)
            ans=input('还可以问,推出请输入bye')

你可能感兴趣的:(python,python)