目录
Ctrl+enter可以执行anaconda的Python语句。
Terminal中命令
conda create –n class2 python=2.7 #创建class2命名的环境
conda activate class2 #进入环境class2
conda list #显示当前环境下安装的所有包
conda install numpy #安装numpy包
conda update numpy
conda uninstall numpy
conda search numpy #找到所有numpy的版本
conda install numpy=1.05 #指定安装numpy包1.0.5版本
# 整数
a=1
b=2
# 浮点数
c=1.0
d=0.11111
# 字符串
s1='HELLO WORLD'
s2="欢迎来到Python的基础课!"
s3='''我也是合法的字符串呢'''
s4='我是字符串'\
'并且我还可以换行写'
s5='这个是默认拼接' '非常有意思的写法!'
# 布尔值
f1=True
f2=False
# 空值
t=None
# 常量:指的是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:
PI=3.14159
# 判断一个变量的数据类型
type(f1) 直接会显示bool类型
type(PI)
type(s5)
isinstance(f1,float)
isinstance(f1,bool) 判断f1是不是bool类型,是就返回true
isinstance(f1,(float,bool,int)) 判断f1是bool类型或者int类型吗?如果是二者其中一个返回true。
# 变量赋值
A=12
B=A
# 对象的赋值:指针
C=[1,2,3,4,5]
D=C
1>2
A=10
B='c'
A==B
A!=B
C=A
A is C
A==C
D=[1,2,3]
E=D
F=[1,2,3]
E==D #判断的是内容
E is F
E is not F #不仅判断内容而且判断存储的位置是否一致
A<=7
A>=12
1<=A<3234 #可以连接写进行判断
1&2
1|2|4
not 0
1 and 0 or 2 and not 3 #not的优先级最高,即1 and 0 or 2 and (not 3),然后从左到右依次执行
直接输入一个pass可以表示什么都不执行
for循环的时候打印下标,还可以逆向遍历
# 中断循环与跳过循环:break(跳出整个循环,即终止循环)、continue(跳出本次循环,执行下一个for语句)
cnt=0
while True:
if cnt==150:
break
elif not cnt in [111,122,133,144]:
cnt+=1
continue
else:
print(f'hello,{cnt}!')
cnt+=1
求1000以内的所有质数
for n in range(2,1001,1):
flag=True
for i in range(2,n,1):
if n%i==0:
flag=False
break
if flag:
print(n,end='\t')
# 函数:高效复用代码
#例子:任意自然数1+2+...+n的求和
def get_sum(n):
SUM =0
for i in range(n):
SUM+=(i+1)
return SUM
get_sum(10)
函数的参数:默认参数、可变参数、关键字参数
# 默认参数
def get_power(val,n=2):
result=1
for i in range(n):
result*=val
return result
get_power(10) #此时使用的是默认参数
get_power(10,3) #此时使用的不是默认的数值
# 可变参数
def get_sum(*b):
return [v**2 for v in b]
get_sum(1,2,3,4,5,6,7)
# 关键字参数
def get_info(name,age,**kw):
print(f'name is {name},age is {age},other: {kw}')
get_info('Jack',20,city='Shanghai')
递归函数
# 阶乘
def get_factorial(n):
r=1
for i in range(n):
r*=i+1
return r
get_factorial(10)
#使用递归求函数的阶乘
def get_factorial_2(n):
if n==1:
return n
return n*get_factorial_2(n-1)
get_factorial_2(10)
练习:使用递归求解斐波那契数列第n项:
F(1)=1 F(2)=1 F(3)=F(1)+F(2)
.... F(n)=F(n-1)+F(n-2)
def get_fbnx(n):
if n==1 or n==2:
return 1
return get_fbnx(n-1)+get_fbnx(n-2)
get_fbnx(10)
# 安装itchat库:pip install itchat
import itchat #登录微信,获取好友信息
import pandas as pd #数据分析
# 登录网页版微信,获取好友信息:
itchat.auto_login(True) #自动登录,三分钟之后不必重复登录
friends = itchat.get_friends(update=True)
friends
type(friends)
print(‘朋友数:\t’, len(friends))
# 发送消息:
itchat.send('Hello, 你好',toUserName='filehelper')
# 回复消息:
@itchat.msg_register(itchat.content.TEXT)
def text_reply(msg):
print("我收到了消息:",msg.text)
return "收到了你的消息:"+msg.text
# itchat.auto_login()
itchat.run()
# 消息类型:TEXT, MAP, CARD, NOTE, SHARING、PICTURE, RECORDING, ATTACHMENT, VIDEO、FRIENDS
# 获取好友信息:itchat.get_friends(update=True)
#数据分析
df = pd.DataFrame(friends) #friend是一个list,然后可以转化为一张表
df.shape
df.columns.tolist() #查看列的信息,转化为列表
df.RemarkName.tolist() #查看备注名
#保存信息,只需登录一次,避免重复登陆
with open(’friends.pickle’,’wb’) as f:
pickle.dump(friends, f)
#使用以下方式进行加载
with open(‘friends.pickle’,’rb’) as f:
friends = pickle.load(f)
print(‘朋友数:\t’, len(friends))
import os
# 列举当前路径下所有文件
files=os.listdir('./')
print(files)
# 加载指定文件
## 方法一:不太好,会产生错误
fp=open(files[4],'r',encoding='utf-8')
text=fp.read() # 读取所有文本
lines=fp.readlines() # 读取所有行
fp.close()
## 方法二
with open(files[4],'r',encoding='utf-8') as fp:
text2=fp.read()
lines=fp.readlines()
# 输出文件内容
print('text与text2相同:',text==text2)
print('方式一读入:\n',text,'\n','*'*50)
print('方式二读入:\n',text2)
## 文件的保存
with open('data.txt','w',encoding='utf-8') as fp:
fp.write('你好,这里是万门大学的Python基础课,从这里开启你的Python之旅吧!')
#数据持久化
import pickle
d={'course':'Python基础课程','student':'零基础','feature':'有趣有用'}
print(type(d))
print(d)
# 保存, wb表示保存的是二进制的字节流
with open('data.dict','wb')as fp:
pickle.dump(d,fp) #d表示保存的对象,fp表示保存的文件
# 加载
with open('data.dict','rb')as fp:
d2=pickle.load(fp)
print('d2==d:',d2==d)
print(d2)
如果要给java开发的工程师传输文件,则不能使用pickle,可以采用import json。
#随机数的生成
import random
for x in range(10):
r = random.random() #生成0-1的浮点数
# r = random.randint(1,10) #生成1-10的随机整数
# r=10+random.random()*10
# r=random.uniform(10,20) #生成指定范围内的浮点数
print(r)
#图像的读取和保存
from PIL import Image
# pip install Pillow
img = Image.open('signature.png')
img.show() #调用系统的图片查看器
print(img.format, img.size, img.mode)
img.save("copy.png")
#图通道的分离与合并
r, g, b = img.split() #分离
print(r.size,r.mode)
# do something
img = Image.merge("RGB", (r,g,g)) #图通道的合并
img.show()
#图像区域的裁剪
img2 = img.copy() #直接复制图像
box = (0, 100, 400, 600)
region = img2.crop(box)
region.show()
#图像的缩放、旋转、翻转
out = img.resize((128, 128))
out.show()
out = img.rotate(45) # 逆时针角度表示
out.show()
out = img.transpose(Image.FLIP_LEFT_RIGHT) #左右翻转
out.show()
out = img.transpose(Image.FLIP_TOP_BOTTOM) #上下翻转
out.show()
out = img.transpose(Image.ROTATE_90)
out.show()
out = img.transpose(Image.ROTATE_180)
out.show()
out = img.transpose(Image.ROTATE_270)
out.show()
#数据的可视化
import seaborn as sns #seaborn是在matplotlib的基础上的抽象
import matplotlib.pyplot as plt
import numpy as np
import random
mat=np.random.random((100,100))*255
mat=np.array(mat,dtype=np.uint8)
plt.figure(figsize=(10,10))
# 1:1行;2:两列;1:第一个图
plt.subplot(2,2,1)
plt.axis('off')
plt.imshow(mat)
plt.subplot(2,2,4)
sns.lineplot([x for x in range(100)],[random.random()*x for x in range(100)])
plt.show()
#词云、分词
with open("sign.txt","r",encoding="utf-8") as f:
text=f.read()
print(text)
from wordcloud import WordCloud
import jieba
import re
#words=[word for word in jieba.cut(text) if re.sub(r’\n|, |。',’’,word)] #如果word中存在\n,逗号,句号等则替换为空格
words=[word for word in jieba.cut(text) if re.search(r'[\u4e00-\u9fa5]+',word)] #从text中剪切到word,然后查询其中的中文字符,
# words=[word for word in jieba.cut(text) if re.search(r'[a-zA-Z]+',word)] #筛选出英文字符
# words=[word for word in jieba.cut(text) if re.search(r'[0-9]+',word)] #筛选出数字
# print(words)
wc = WordCloud(
background_color="white",
max_words=2000,
font_path='C:\\Windows\\Fonts\\simfang.ttf',
height=1000,
width=1000,
max_font_size=80,
random_state=50,
)
myword = wc.generate(text)
wc.to_file('signature.png')
os.system('start signature.png')
#多线程
# GIL 全局线程锁
# IO密集
# 多进程:multiprocessing
import threading
import time
from datetime import datetime as dt
def say_hello(word):
time.sleep(1) #休眠1s
print(word)
pool=[]
now=dt.now()
for x in range(10):
t=threading.Thread(target=say_hello,args=(x,))
t.start()
pool.append(t)
for t in pool:
t.join()
end=dt.now()
print('总用时:',(end-now).total_seconds())
#正则表达式
import re
# 查找所有数字, +表示查找一个以上的数字
# nums=re.findall(r'\d+',text)
# print(nums)
# # 查找所有单词:
# words=re.findall(r'[a-zA-Z]+',text)
# print(words)
# # 查找所有汉字
chinese_words=re.findall(r'[\u4e00-\u9fa5]+',text)
chinese_words=re.findall(r'[\u4e00-\u9fa5]{4,10}',text) #指定要查找的汉字个数
print(chinese_words)