用python解决以下问题,尽量简单易懂

  1. 实验内容
  2. 编写一个程序:
    a. 这个程序会在源代码所在文件夹创建一个新的文件夹名称为outputForLab3
    b. 程序会在outputForLab3文件夹里面创建50个txt文件
    (1) 这50个txt文件的文件名由英文字母和数字构成,随机生成5位长度文件名
    (2) 这50个txt文件里面随机写入不同的内容,做到大小不一。比如有的文件3行内容,有的文件500行内容。
    c. 创建完成以后,程序会读取这50个文件的文件路径和大小,把这些数据逐行写入filesize.txt文件中保存起来,filesize.txt存在outputForLab3文件夹外面,也就是你源代码所在文件夹。
    d. 用zipfile库把outputForLab3文件夹里面的文件打包成一个zip压缩包,取名称为output3.zip
    e. 用正则表达式读取filesize.txt里面的文件大小信息,把里面所有文件的大小加起来和output3.zip的大小进行比较。看哪一个大,并输出两者大小的差距,计算打印zip的压缩率。
  3. 编写一个程序:
    a. 这个程序会读取第一个题目中程序创建的filesize.txt,把里面的文件按照文件大小从小到大进行排列,找到里面排在第40的文件,打印出文件路径和文件大小
    b. 如果文件中,在任何一行开始的地方有“-d-”这3个字符,程序就把这一行文件路径的文件删除了,并记录下删除文件的文件路径,filesize.txt文件浏览完,删除完成所有带有-d-符合的文件后,打印出删除文件的文件路径,一行打印一个文件路径。
  4. 实验步骤和结果
  5. 要求涉及文件打开操作的,要用with statement
import os
import string
import random
import zipfile
pool = string.ascii_lowercase + string.digits
root = 'outputForLab3'
count_file = 'filesize.txt'
zip_file = 'output3.zip'
file_size = 0
zip_size = 0


def random_select(k):
    return ''.join(random.choices(pool, k=k))


print(pool)
if not os.path.exists(root):
    os.mkdir(root)
for i in range(50):
    rd = random_select(5)
    with open(os.path.join(root, rd+'.txt'), 'w+') as f:
        f.write(random_select(random.randint(10**3, 10**5)))
    # pass
z = zipfile.ZipFile(zip_file, 'w')
with open(count_file, 'w+') as out:
    for p, d, f in os.walk(root):
        for file in f:
            out.writelines(os.path.join(p, file)+' size:' +
                           str(os.path.getsize(os.path.join(p, file)))+'\n')
            file_size += os.path.getsize(os.path.join(p, file))
            z.write(os.path.join(p, file))
        z.close()
        zip_size = os.path.getsize(zip_file)
print(file_size, zip_size, file_size-zip_size, (file_size-zip_size)/file_size)

实验3完整代码,参考一下:

import os,random,string,zipfile
path= 'outputForLab3'
if not os.path.exists(path):
    os.makedirs(path)
for i in range(50):
    fn=''.join(random.sample(string.ascii_letters+string.digits,5))
    with open(path+'/'+fn+'.txt','w',encoding='utf-8') as f:
        n=random.choice(range(5,501))
        for j in range(n):
            f.writelines(''.join(random.sample(
                string.ascii_letters+string.digits,random.randint(4,20))))
            f.write('\n')
    fpath=path+'/'+fn+'.txt'
    with open('filesize.txt','a',encoding='utf-8') as f1:
        con=fpath+'\t'+str(os.path.getsize(fpath))
        f1.write(con+'\n')
    with zipfile.ZipFile('output3.zip', mode='a') as zf:
        zf.write(fpath, compress_type=zipfile.ZIP_DEFLATED)

size=0
with open('filesize.txt','r',encoding='utf-8') as f2:
    line=[x for x in f2.read().strip().split('\n')]
    for l in line:
        size+=int(l.split('\t')[-1])
zf_size = os.path.getsize('output3.zip')
print(size,zf_size,size-zf_size,f'{zf_size/size*100}%')


输出结果:

F:\2021\qa\ot2>t9
165133 126374 38759 76.52861632744515%