7/31 Python.04

今天真的动不动报错,后面有些烧脑但真的DNA动了


目录

12 输入和输出

13 文件方法

14 OS文件/目录方法

15 异常处理

16 面向对象

17 命名空间/作用域


12 输入和输出

'''输出'''
s='asdfgh\n'
print(str(s)) # 会转义
print(repr(s)) # 带''且不转义,为解释器易读的表达形式
# 括号内:
# 若表达式会运算
# 若seq内,参数则返回值,字符串不会转义

for x in range(5):
    print(repr(x).rjust(2),repr(x*x).rjust(2)) #这里和用str()没差
# 等价于'{:2d} {:3d}'.format(x, x*x)

print('{!a:3},{!s:3},{!r}'.format(a,'a','a'))
#输出:10 ,a  ,'a'
#为啥这不能加d:Unknown format code 'd' for object of type 'str'

print('{0[a]},{0[b]}'.format(dct)) #不要忘了加0否则IndexError~
print('{a},{b}'.format(**dct)) #效果一样不需要加0


'''输入'''
a,b,c=(input('input:').split()) # 以空格分割输入


'''读和写文件'''
# r 只读。文件指针放在文件开头。(默认)
# w 只写。已存在从头重新编辑,不存在创建。
# a 追加。已存在文件指针放在文件结尾,不存在创建。
# rb wb ab 以二进制格式
# r+ w+ a+ 读写
# rb+ wb+ ab+ 以二进制格式读写

f=open("foo.txt",'w')
print(f.write('111\n222')) #输出7,返回的是字符数
f.close()
f=open("foo.txt",'r')
#指针会后移,以下操作需要重新读的不复述了
#print(f.read()) #相当于直接输出'111\n222'
#print(f.readlines()) #输出['111\n', '222']
print(f.tell()) #输出0
print(f.readline()) #输出111加换行
print(f.tell()) #输出5,换行当成2个字符,要\t是当成一个
print(f.readline()) #输出222
print(f.tell()) #输出8
f.close() 
     
# write()如果类型不是字符串需先转换

with open("foo.txt",'rb') as f: # with打开可以正确关闭
    # seek必须二进制读入
    print(f.seek(3,0)) #从头,返回位置3,第二个数默认0
    print(f.seek(3,1)) #从当前,返回位置6
    print(f.seek(-3,2)) #从结尾倒着,返回位置5
print(f.close) #这玩意有返回值hh,open就没有


'''pickle模块'''
import pickle
f=open("foo.pkl",'wb+') #注意文件类型!以及要是二进制
l1=[1,2,3]
l1.append(l1)
pickle.dump(l1,f) # 序列化操作,没有返回值
print(f.read()) #是有存进去但是读不出来悲
pickle.dump(l1,f,-1) #“从文件中创建上一次程序保存的对象”不懂
f.seek(0) #要不加Ran out of input
print(pickle.load(f)) # 反序列化操作,输出[1, 2, 3, [...]],append里面没了

13 文件方法

# open(file,mode='r')

#以及默认参数:
# buffering=-1 设置缓冲
# encoding=None 一般UTF-8
# errors=None 报错级别
# newline=None 区分换行符
# closefd=True 传入的file参数类型
# opener=None 设置自定义开启器,其返回值必须是一个打开的文件描述符 

#mode参数有:
# t 文本模式(默认)
# x 写模式,新建文件,存在则报错
# b 二进制
# + 可读可写
# 其他的说过了

'''file对象'''
with open('fo.txt','w+') as f:
# flush() 刷新文件内部缓冲
# fileno() 返回一个整型的文件描述符,可以用在如os模块的read方法等一些底层操上
# isatty() 是否连接终端设备
# truncate() 无size从当前位置截断
    f.write('123456789')
    print(f.truncate(5))
    f.seek(0)
    print(f.read()) #输出:12345
# writelines(str) 把seq里(必str)元素全以str写入
    f.writelines(['1','2','3'])
    f.seek(0)
    print(f.read()) #输出12345123
print(f.closed) #返回True,即用with会自动关闭

14 OS文件/目录方法

import os
#只写一些常用的

# chdir(path) 改变目录,返回是否允许访问
#用getcwd()查看修改后目录

# listdir(path) 返回该文件夹中所有文件名字的列表
print(os.listdir(r'D:\C_plate\Microsoft VS Code\folder')) #注意不要少r!!

# mkdir(path,mode=0777) 以数字权限模式创建目录(若存在触发异常) 
os.mkdir(r'D:\C_plate\Microsoft VS Code\folder\hh') #啊目录就是文件夹

# makedirs(name,mode=511,exist_ok=False目录存在触发异常) 递归创建多层目录
os.makedirs(r'D:\C_plate\Microsoft VS Code\folder\h1\h2\h3')

# walk(top) 创建生成器查找文件
#含默认参数:
# topdown=True 目录自上而下
# onerror=None 
# followlinks=False 通过软链接访问目录
for root,dirs,files in os.walk(".",topdown=False): #这里path用的相对路径
    for name in files:
        print(os.path.join(root,name))
    for name in dirs:
        print(os.path.join(root,name))
# rmdir(path) 删除目录
# sep


#以下用os.path调用
# exists()
# dirname()文件路径 basename()文件名
# join() 把目录和文件名合成一个路径
# split() 把路径分割成dirname和basename,返回元组
# isdir() isfile()
# getsize() 返回文件大小,不存在则报错

15 异常处理

'''
try:
except <> as err: 可以把err输出
else: 若无异常
finally: 无论有无异常,若有异常且未被except截住则执行完再抛出
'''
try:
    os.mkdir(r'D:\C_plate\Microsoft VS Code\folder\hh')
except FileExistsError as err:
    print('error:',err)

#raise Exception('') 抛出一个指定异常


'''用户自定义异常'''
class MyError(Exception): #MyError是Exception的派生类
    def __init__(self,value):
        self.v=value
    def __str__(self):
        return repr(self.v)
try:
    MyError(5)
except MyError as e:
    print("error:",e.v)

16 面向对象

'''类'''
# __开头的变量/方法为私有
class T:
    def prt(self,val): #self是类的实例,不是关键字可以换~
        self.v=val
        print(self) #代表当前对象的地址
        print(self.__class__) #指向类
t=T() #要改成__init__实参写里面
t.prt(5) #就不需要再写这步调用
#输出:
# <__main__.T object at 0x046A1928>
# <class '__main__.T'>


'''继承'''
# 继承可以调用、覆写父类方法
class T1(T):
    def f(self,v1):
        T.prt(self,v1) #这里v1对于T的函数是实参
        print(self.v) #没有输出,所以不可以直接访问父类方法
        #但是都改成构造函数__init__可以访问,这里v是T的方法
        print(self.v1) #现在不会报错但没有输出
        #都改成构造函数__init__会报错AttributeError
t=T1()
t.prt(5)
#输出:
# <__main__.T1 object at 0x04C51958>
# <class '__main__.T1'>


'''多继承'''
#调用方法找顺序:子类->父类(左->右)

# super(子类,self) 为避免^而代替类名调用父类方法


'''类的专有方法'''
# __init__构造函数 __del__析构函数
# __repr__ 打印,转换
# __call__ 函数调用
# __add__加 __sub__减 __mul__乘 __truediv__除
# __mod__取余 __pow__平方
# __len__获得长度 __cmp__比较运算
# __setitem__按照索引赋值 __getitem__按照索引获取值


'''运算符重载'''
class Vector:
    def __init__(self,x,y):
        self.x=x
        self.y=y
    def __add__(self,other): #必须是类的专有方法啊,否则感觉是不会调用这个方法
        return Vector(self.x+other.x,self.y+other.y)
    def __str__(self): #方法必须是这样写啊,以及要不写方法就没有输出了
        return 'Vector(%d,%d)'%(self.x,self.y)
v1=Vector(2,10)
v2=Vector(5,-2)
print(v1+v2)

17 命名空间/作用域

和C差不多吧

# global 内部作用域修改外部作用域变量前声明
# nonlocal non-local修改non-global前声明

还差一些就把高级教程前的知识点看完了qwq但还是算了睡了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无名乙醛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值