随笔 - 68  文章 - 2 评论 - 0 trackbacks - 0

#sys.argv练习
#写一个python脚本,在cmd里执行
#python xxx.py 用户名  密码 cp 文件路径  目的地址
#python xxx.py tom cp 文件  指定目录
#python xxx.py tom rm 指定目录
#python xxx.py tom rename 指定目录名 新目录名
import sys
import os
import shutil
if len(sys.argv)>=3:
    if len(sys.argv)==6 and sys.argv[1]=='tom' and sys.argv[2]=='123456' and sys.argv[3]=='cp': #带账号密码的 拷贝
        if os.path.exists(sys.argv[4]) and os.path.exists(sys.argv[5]): #文件存在,路径存在
            shutil.copy2(sys.argv[4],sys.argv[5])#拷贝
        else:print('file not exists!')
    elif len(sys.argv)==5 and sys.argv[2]=='cp': #只带账号 拷贝
        if os.path.exists(sys.argv[3]) and os.path.exists(sys.path[4]):
            filename = os.path.basename(sys.argv[3])
            path = os.path.join(sys.argv[4],filename)
            shutil.copy2(sys.argv[3],path)
        else:print('file not exists!')
    elif len(sys.argv)==4 and sys.argv[2]=='rm': #删除
        if os.path.exists(sys.argv[3]) and sys.argv[1]=='tom':
            if os.path.isfile(sys.argv[3]):
                os.remove(sys.argv[3]) # 如果是文件用  os.remove
            else:
                shutil.rmtree(sys.argv[3]) #如果是文件夹 用shutil.rmtree
        else:print('file not exists or name wrong!')
    elif len(sys.argv)==5 and sys.argv[2]=='rename':
        if os.path.isfile(sys.argv[3]):
            os.rename(sys.argv[3],sys.argv[4]) #如果是文件 用os.rename 改名字
        else:
            shutil.move(sys.argv[3],sys.argv[4],copy_function=shutil.copy2) #如果是文件夹 用shutil.move 改文件夹名字
else:print('请重试')
#用os.walk计算文件夹path的大小
import os
g = os.walk(r'E:\untitled1\object')
size = 0
for i in g:
    # print(i) #遍历显示元组 (路径,路径内的文件夹列表,路径内的文件列表)
    path,dir_list,name_list = i
    for name in name_list:
        abs_path = os.path.join(path,name) #先组装成绝对路径
        size += os.path.getsize(abs_path)
print(size) #打印出字节
#logging
    #排错 数据分析 操作审计
    #普通的输出(文件、屏幕)
    #切分日志(时间、文件大小)
#shutil
    #和文件相关的内容  压缩 解压缩 删除
#面向对象编程
class Person:
    def __init__(self,name,age,score):  #属性必须叫__init__,不能改变,所有属性都写在这里 __init__不执行,创建类的时候才执行
        self.name = name
        self.age = age
        self.score = score

p = Person('tom',25,98)
print(p.__dict__) #{'name': 'tom', 'age': 25, 'score': 98} 输出对象p的所有属性字典
#Person('tom',25,98) 里的三个参数都传到了__init__ 函数 分别赋值到相应的位置

#属性的增删改查
p.name = 'jerry' #改
print(p.name)
p.grade = 3 #增加
print(p.grade)
del p.score #删除
print(p.__dict__)

#类名() ,先在内存开辟空间
# 1、定义一个圆形类,半径是属性,圆形方法有计算圆形面积,计算圆形周长,实例化2个半径分别为5和10的圆
from math import pi
class Circle:
    def __init__(self,r):
        self.r = r

    def mj(self):
        return self.r**2*pi

    def zc(self):
        return self.r*2*pi
c1 = Circle(5)
print(c1.mj())
print(c1.zc())

c2 = Circle(10)
print(c2.mj())
print(c2.zc())
# #2、定义一个用户类,用户名和密码是这个类的属性,登录成功之后才创建用户对象 ,设计一个修改密码的方法
import os
def login(name,pwd):
    with open('userinfo',encoding='utf-8') as f1:
        for line in f1:
            user_name,user_pwd = line.strip().split('|')
            if name == user_name and pwd == user_pwd:
                return True
            else:return False

class User:
    def __init__(self,name,pwd):
        self.name = name
        self.pwd = pwd

    def change_pwd(self):
        old_pwd = input('Entry old pwd:')
        new_pwd = input('Entry new pwd:')
        if self.pwd == old_pwd:
            with open('userinfo',encoding='utf-8') as f1,open('userinfo.bak',mode='w') as f2:
                for line in f1:
                    name,pwd = line.strip().split('|')
                    if name== self.name and pwd == old_pwd:
                        line = name+'|'+new_pwd+'\n'
                    f2.write(line)
                    print('change successful!')
            os.remove('userinfo')
            os.rename('userinfo.bak','userinfo')

name = input('Entry a name:')
pwd = input('Entry pwd:')
ret = login(name,pwd)
if ret:
    u1 = User(name,pwd)
    u1.change_pwd()
else:print('name or pwd wrong!')
posted on 2020-07-30 14:00  94小渣渣  阅读(35)  评论(0编辑  收藏