Python基础

  • turtle库
  • 基础知识
  • 基本数据
    • 数字类型
      • 整数类型
      • 浮点数类型
      • 复数类型
    • 数字操作
      • 操作符
    • 字符串操作
      • 字符串切片:
      • 字符串操作
      • 字符串处理函数
      • 内置字符串操作方法
    • 字符串格式化
  • time库
    • 时间获取
    • 时间格式化
    • 程序计时
  • 库引用
  • 程序的控制结构
    • 程序分支结构
    • 异常处理的使用
    • 程序的循环结构
  • random库
  • 函数
  • 集合
    • 集合
    • 元组
    • 列表
  • jieba库
  • 文件
  • wordcloud库
  • OS库
  • Tips
#温度转换
a = input()
if a[-1] in['F','f']:C = (eval(a[0:-1])-32)/1.8print("{:.2f}C".format(C))
elif a[-1] in['C','c']:F = 1.8*eval(a[0:-1])+32print("{:.2f}F".format(F))
else:print("输入格式错误")
print(str(float(input("hh")) / 1000) + 's')
n = eval(input())
if n == 0:print("Hello World")
elif n > 0:print("He\nll\no \nWo\nrl\nd")
else:for c in "Hello World":print(c)

turtle库

turtle.setup (width, height, startx, starty)
Penup 抬起画笔或者pu或up
Pendown 放下画笔或pd或down
Pensize() 调整画笔尺寸
Pencolor()调整画笔颜色 colorstring 或(r,g,b)
White black grey darkgreen gold violet purple
Fd(distance) 向前行进一个距离
Seth(angle) 改变方向
Circle(半径,角度)
Goto(x,y)将画笔移动到坐标x,y处

#KochDrawV1.py
#科赫雪花小包裹
import turtledef koch(size, n):if n == 0:turtle.fd(size)else:for angle in [0, 60, -120, 60]:turtle.left(angle)koch(size/3, n-1)def main():turtle.setup(800, 400)turtle.penup()turtle.goto(-200, 100)turtle.pendown()turtle.pensize(2)level =3  #3阶科赫曲线,阶数koch(400, level)  turtle.right(120)koch(400, level)  turtle.right(120)koch(400, level)turtle.hideturtle()main()
#RoseDraw.py
#玫瑰花绘制
import turtle as tdef DegreeCurve(n, r, d=1):for i in  range(n):t.left(d)t.circle(r, abs(d))
#初始位置设定
s=0.2 #size
t.setup(450*5*s, 750*5*s)
t.pencolor("black")
t.fillcolor("red")
t.speed(100)
t.penup()
t.goto(0,900*s)
t.pendown()
#绘制花朵形状
t.begin_fill()
t.circle(200*s,30)
DegreeCurve(60,50*s)
t. circle(200*s,30)
DegreeCurve(4,100*s)
t. circle(200*s,50)
DegreeCurve(50,50*s)
t. circle(350*s,65)
DegreeCurve(40,70*s)
t. circle(150*s,50)
DegreeCurve (20,50*s,-1)
t.circle(400*s,60)
DegreeCurve(18,50*s)
t.fd(250*s)
t.right(150)
t.circle(-500*s,12)
t.left(140)
t.circle(550*s,110)
t.left(27)
t.circle(650*s,100)
t.left(130)
t.circle(-300*s,20)
t.right(123)
t.circle(220*s,57)
t.end_fill()
#绘制花枝
t.left(120)
t.fd(280*s)
t.left(115)
t.circle(300*s,33)
t.left(180)
t.circle( -300*s,33)
DegreeCurve(70, 225*s, -1)
t.circle(350*s,104)
t.left(90)
t.circle(200*s,105)
t.circle(-500*s,63)
t.penup( )
t.goto(170*s,-30*s)
t.pendown( )
t.left(160)
DegreeCurve(20,2500*s)
DegreeCurve(220, 250*s, -1)
#绘制叶子
t.fillcolor('green')
t.penup()
t.goto(670*s,-180*s)
t.pendown
t.right(140)
t.begin_fill( )
t.circle(300*s,120)
t.left(60)
t.circle(300*s,120)
t.end_fill()
t.penup()
t.goto(180*s,-550*s)
t.pendown
t.right(85)
t.circle( 600*s,40 )
#绘制另一个叶子
t.penup()
t.goto(-150*s, -1000*s)
t.pendown()
t.begin_fill()
t.rt(120)
t.circle(300*s,115)
t.left(75)
t.circle(300*s,100)
t.end_fill()
t.penup()
t.goto(430*s,-1070*s)
t.pendown()
t.right(30)
t.circle(-600*s,35)
t.done()
#七段数码管
import turtledef drawLine(draw): #绘制单段数码管turtle.pendown() if draw else turtle.penup()turtle.fd(40)turtle.right(90)def drawDigit(digit): #根据数字绘制七段数码管drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,2,6,8] else drawLine(False)turtle.left(90)drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)turtle.left(180)turtle.penup()  #为绘制后续数字确定位置turtle.fd(20)   #为绘制后续数字确定位置def drawDate(date): #获得要输出的数字for i in date:drawDigit(eval(i)) #通过eval()函数将数字字符串形式变为整数数字形式def main():turtle.setup(800, 350, 200, 200)turtle.penup()turtle.fd(-300)turtle.pensize(5)drawDate('20181010')turtle.hideturtle()turtle.done()main()
#七段数码管2
import turtle, timedef drawGap():turtle.penup()turtle.fd(5)def drawLine(draw): #绘制单段数码管drawGap()turtle.pendown() if draw else turtle.penup()turtle.fd(40)drawGap()turtle.right(90)def drawDigit(digit): #根据数字绘制七段数码管drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,2,6,8] else drawLine(False)turtle.left(90)drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)turtle.left(180)turtle.penup()  #为绘制后续数字确定位置turtle.fd(20)   #为绘制后续数字确定位置def drawDate(date): #date为日期,格式为'%Y-%M=%D+'turtle.pencolor('red')for i in date:if i == '-':turtle.write('年',font=('Arial', 18, 'normal'))turtle.pencolor('green')turtle.fd(40)elif i == '=':turtle.write('月',font=('Arial', 18, 'normal'))turtle.pencolor('blue')turtle.fd(40)elif i == '+':turtle.write('日',font=('Arial', 18, 'normal'))else:drawDigit(eval(i))def main():turtle.setup(800, 350, 200, 200)turtle.penup()turtle.fd(-300)turtle.pensize(5)drawDate(time.strftime('%Y-%m=%d+', time.gmtime() ))turtle.hideturtle()turtle.done()main()
#自动轨迹绘制
#AutoTraceDraw.pyimport turtle as t
t.title('自动轨迹绘制')
t.setup(800,600,0,0)
t.pencolor("red")
t.pensize(5)#数据读取
datals = []
f = open("data.txt")
for line in f:line = line.replace("\n","")datals.append(list(map(eval, line.split(","))))
f.close()#自动绘制
for i in range(len(datals)):t.pencolor(datals[i][3],datals[i][4],datals[i][5])t.fd(datals[i][0])if datals[i][1]:t.right(datals[i][2])else:t.left(datals[i][2])
#绘制等边三角形
from turtle import *
setup(650,350,300,200)
fd(100)
seth(-120)
fd(100)
seth(120)
fd(100)
#绘制叠加等边三角形from turtle import *
setup(600,400)
seth(90)
penup()
fd(150)
pendown()
seth(-60)
fd(200)
seth(180)
fd(200)
seth(60)
fd(100)
seth(0)
fd(100)
seth(-120)
fd(100)
seth(120)
fd(100)
seth(60)
fd(100)
# 绘制正方形螺线
from turtle import*
setup(600,400)
for i in range(0,10):fd(150-i*5)seth(90)fd(150-i*5)seth(180)fd(149-i*5)seth(-90)fd(149-i*5)seth(0)
# 五角星绘制
from turtle import *
fillcolor("red")
begin_fill()
while True:forward(200)right(144)if abs(pos())<1:break
end_fill()

基础知识

Eval函数可以直接进行对字符串进行运算
输入10 + 100 1 / 20
输出110.00 0.05

s = input()
print("{:.2f}".format(eval(s)))
range(开始,终点,步长)
# 九九乘法表
for i in range(1,10):for j in range(1,i+1):print("{}*{}={:2}".format(j,i,i*j),end=' ')print(' ')
# 货币转换
a=input()
if a[0:2] in 'RMB':USD=eval(a[3:])/6.78print("USD{:.2f}".format(USD))
elif a[0:2] in 'USD':RMB=eval(a[3:])*6.78print("RMB{:.2f}".format(RMB))

基本数据

数字类型

整数类型

十进制前无引导
二进制 0b或0B 即0B101
八进制0o或0O
十六进制0x或0X
整数类型没有取值范围限制

浮点数类型

4.3e-2=0.043
Round(x,d)对x进行四舍五入,d是截取位数
因为0.1+0.2!=0.3

复数类型

12+4j或J
分别求取其实属部分和虚数部分,如对z字母操作
Z.real 实数 z.imag虚数

数字操作

操作符

//整数商
X**y x的y次幂
Int(X) 将x转化为整数,x可为浮点或字符串
Float(x) x可为整数或字符串
Complex(re,im)生成一个复数

字符串操作

字符串切片:

[1:8:2]:根据2这个步长来进行切片
[::-1]:倒序输出

字符串操作

连接两个字符串a+b
子串x in s

字符串处理函数

len(x)返回字符串长度,汉字英文字母符号均被认为是一个
str(x)将任意类型转换为字符串形式,与eval功能相反
hex(x)转换为十六进制
oct(x)转换为八进制
chr(u)u为Unicode编码,返回其对应字符
ord(x)x为字符,返回其对应的Unicode编码
chr(x) ord(x) (均对单字符操作)
1004对勾 9801金牛
输出十二星座符号

for i in range(12):print(chr(9800 + i),end=' ')
♈ ♉ ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓

内置字符串操作方法

str.lower()str.upper() 全部字符改为小写/大写
‘AbC’.lower()结果为 abc
str.split(sep=None)根据sep分割部分
‘A,B,C’.split(‘,’) 结果为[‘A’, ‘B’, ‘C’]
str.count(sub)返回字串sub在str 中出现的次数
str.replace(old,new) 将old子串替换为new
str.center(width[,fillchar])字符串根据长度居中
其余填充为char的字符
str.strip(chars)去掉左右侧chars中列出的字符
‘= python=’.strip(‘ =np’)结果为 ‘ytho’
srt.join(iter) iter每个元素间增加一个str
‘,’.join(‘12345’)结果为 ‘1,2,3,4,5’

字符串格式化

槽 {}
参数槽{2}对应着.format 中第三个元素
{<参数序号>:<格式控制标记>}

  • 格式:{:<填充><对齐><宽度><,><.精度><类型>}
  • 填充:用于填充的单个字符
  • 对齐:<左对齐 >右对齐 ^上对齐
  • 宽度:槽设定的输出宽度
  • , 数字的千位分隔符
  • .精度:浮点小数精度或 字符串最大输出长度
  • 类型:
    整数类型: b二进制,c字符Unicode形式,d十进制,
    o八进制, x,X十六进制
    浮点数类型:e,E科学计数法数,f通常形式,
    %百分数形式
  • 例子:
    {0:,.2f}.format(12345.6789) 12,345.68

time库

时间获取

time.time()很长的浮点数
time.ctime()返回字符串 ‘Sun Feb 9 13:02:55 2020’
time.gmtime()计算机可处理的时间格式
time.struct_time(tm_year=2020, tm_mon=2, tm_mday=9, tm_hour=5, tm_min=4, tm_sec=26, tm_wday=6, tm_yday=40, tm_isdst=0)

时间格式化

strftime(tpl,ts)
tpl格式化模板字符串,定义输出效果
ts计算机内部时间类型变量

>>>t = time.gmtime()
>>>time.strftime(“%Y-%m-%d %H:%M:%S”,t)‘2020-02-09 13:13:20’

%Y年份
%m月份 %B月份名称 %b月份缩写
%d 日期
%A 星期 %a星期缩写
%H 小时(24h制) %i 小时(12h制) %p 上午/下午
%M 分钟
%S 秒
strptime(str,tpl)
str字符串形式的时间值
tpl 格式化模板字符串,定义输入效果

>>>timeStr = ‘2020-02-09 13:13:20’
>>>time.strptime(timeStr,“%Y-%m-%d %H:%M:%S”)time.struct_time(tm_year=2020, tm_mon=2, tm_mday=9, tm_hour=5, tm_min=4, tm_sec=26, tm_wday=6, tm_yday=40, tm_isdst=0)

程序计时

perf_counter()返回一个CPU级别的精准时间计数值

>>>start = time.perf_counter()……
>>>end = time.perf_counter()
>>>end – start22.246465166546112

sleep() 休眠
文本进度条
/r 刷新关键

库引用

import turtle
from <库名>import <函数名>
from <库名>import *<函数名>
import <库名> as <库别名>
循环语句
for <变量> in range(<参数>):
<被循环执行的语句> 0-(参数-1)

range(N) 0–(N-1) N个
range(M,N) M–(N-1) N-M个

程序的控制结构

程序分支结构

单分支结构:

if<条件>:
<语句块>

二分支结构:

if<条件>:
<语句块1>
else:
<语句块2>
或:
<语句块1> if <条件> else <语句块2>

多分支结构:

if<条件1>:
<语句块1>
elif<条件2>:
<语句块2>
else:
<语句块3>

与:x and y
或:x or y
非:not x
一直表示真值:TRUE

异常处理的使用

try:
<语句块1>
expect(<异常类型>):
<语句块2>
try中运行异常则运行expect语句
NameError 输入错误

高级异常处理:

try:
<语句块1>
expect(<异常类型>):
<语句块2>
else:
<语句块3>
finally:
<语句块4>
先执行1,如果报错执行2,不报错执行3,最后一起执行4

程序的循环结构

遍历循环

for <循环变量> in <遍历结构> :
<语句块>

计数循环:

for i in range(M,N,K)
<语句块>

字符串遍历循环

for c in s:
<语句块>
for c in ‘PYTHON’:
print(c, end= ‘,’)//P,Y,T,H,O,N

列表遍历循环

for item in ls:
<语句块>
for item in [123, ‘PY’, 456]:
print(item, end= ‘,’)//123,PY,456

文件遍历循环

for line in fi:
<语句块>
fi是一个文件标识符,遍历其每行,产生循环

无限循环

while <条件>:
<语句>         //按ctrl+c退出

循环控制
break:跳出并结束当前循环,向后执行
continue:结束当次循环,进行下一循环
else在循环中的使用:

for <循环变量> in <遍历结构> :
<语句块1>
else:
<语句块2>

如果程序正常结束则执行else,如果是break退出的程序则不执行

while <条件>:
<语句块1>
else:
<语句块2>

random库

使用随机数的Python标准库
伪随机数 import random
seed(a=None)初始化随机数种子,默认为当前系统时间
random.seed(10)
random()产生0到1之间的随机小数
random.random()

randint(a,b):生成[a,b]之间的整数
randrange(m,n[,k]):生成一个[m,n)之间以k为步长的整数
getrandbits(k)生成一个k比特长的随机整数
uniform(a,b)生成一个[a,b]之间的随机小数
choice(seq) 从序列seq中随机选择一个元素
>>>random.choice([1,2,3,4])
3
shuffle(seq)打乱排序一个序列
>>>random.shuffle([1,2,3,4])
[3,2,4,1]

如果公式一行打不下末尾跟上一个 \ 就可以换到下一行去打
from random import random 只加载random库中random

函数

def<函数名>(<参数>):
<函数体>
return <返回值>
计算阶乘:
def fact(n):
s = 1
for I in range(1, n+1)
s *= i
return s

def fact(n, m=1)
调用的时候是:fact(10) //n=10,m=1
fact(10,5) //n=10,m=5
fact( m=5, n=10) //n=10,m=5

可变自定义函数定义:
def <函数名> (<参数>, *b):

def fact(n, *b):
sum = 0
sum+=n
for item in b:
sum+=item
return sum

>>>print(fact(10,3,5))  //18
>>>print(fact(10,3))    //13

函数返回多个值:
def fact(n):
s = 1
for I in range(1, n+1)
s *= i
return s, n, m
>>>(725760, 10, 5) 元组类型
或者: a, b, c = fact( 10, 5)

局部变量不影响全局变量:
n ,s = 10, 100
def fact(n):
s = 1 //内部s不影响外部s
for i in range(1, n+1):
s *= i
return s
print(fact(n), s) //>>>362800 100

n ,s = 10, 100
def fact(n):
global s //声明一个全局变量s
for i in range(1, n+1):
s *= i
return s
print(fact(n), s) //>>>362800 362800

局部变量为组合数据类型且未创建,等同于全局变量
ls = [‘F’, ‘f’]
def func(a):
ls.append(a)
return
func(‘C’)
print(ls)
>>>[‘F’, ‘f’, ‘C’]

ls = [‘F’, ‘f’]
def func(a):
ls = [] //此ls在此函数运行结束后就被释放了
ls.append(a)
return
func(‘C’)
print(ls)
>>>[‘F’, ‘f’]

lambda函数
<函数名> = lambda <参数> : <表达式>
等价于:
def <函数名>

# 斐波那契数列
def fbi(n):if n == 1 or n == 2:return 1else:return fbi(n-1) + fbi(n-2)n = eval(input())
print(fbi(n))
# 汉诺塔实践
steps = 0def hanoi(src, des, mid, n):global stepsif n == 1:steps += 1print("[STEP{:>4}] {}->{}".format(steps, src, des))else:hanoi(src, mid, des, n-1)steps += 1print("[STEP{:>4}] {}->{}".format(steps, src, des))        hanoi(mid, des, src, n-1)N = eval(input())
hanoi("A", "C", "B", N)

集合

集合

建立集合:
集合不包括重复元素
a = {‘Python’, 123, (‘python’, 12)}
>>>{‘Python’, 123, (‘python’, 12)}

 b = set{‘pypy’}>>>{‘p’, ‘y’, ‘p’, ‘y’}    c = {123, 123}>>>{123}

集合间操作:

 S|TS-TS&TS^T

S<=T 或 S<T 返回True/False 判定S和T 的子集关系
S>=T 或 S>T 返回True/False 判定S和T 的包含关系

S|=T 更新集合S,包括在集合S和T中的所有元素
S-=T 更新集合S,包括在集合S但不在T中的元素
S&=T 更新集合S,包括同时在集合S和T中的元素
S^=T 更新集合S,包括在集合S和T中的非相同元素

集合处理方法:
S.add(x) x不在集合S中,将x增加到S
S.discard(x) 移除S中元素x, 如果x不在集合S中,不报错
S.remove(x) 移除S中元素x,如果x不在集合S中,产生KeyError报错
S.clear()移除S中所有元素
S.pop() 随机返回S的一个元素,更新S,若S为空产生KeyError报错
S.copy() 返回集合S的一个副本
len(S) 返回集合S的元素个数
x in S 判定S中元素x, x在集合S中, 返回True,否则返回False
set(x) 将其他类型变量x转变为集合类型
序列类型:(向量)
字符串形式,元组类型,列表类型
in
not in
+直接连接
*复制
s[i]索引
s[i:j]切片
[::-1]取反
len(s)长度
min(s)max(s)
s.index(x)或s.index(x,i,j)第一次出现x的位置

元组

创建后不可修改,()或tuple(,)
可以元组套元组:
>>>a= (‘1’, ‘2’)
>>>b= (‘A’, ‘3’, a)
>>>((‘A’, ‘3’, (‘1’, ‘2’))
元组调用

>>>creature = (1, 2, 3)
>>>color = (red, blue, creature)
>>>color[-1][2]

列表

创建后可被修改
方括号[]或list() 创建,元素用逗号分隔
>>> ls = [‘a’, ‘b’, ‘c’, 1024]
>>> lt =ls

ls[i] = x 替换为x
ls[i: j: k] = lt 用lt替换为ls切片
del ls[i] 删除该元素
del ls[i:j:k]
ls += lt //ls后部续上lt
ls *= n //内部元素
ls.append(x) 在列表后增加元素x
ls.clear() 删除列表中所有元素
ls.copy() 生成新列表,等于ls
ls.insert(i, x) 在列表ls的第i位置增加元素x
ls.pop(i)将列表ls中第i位置取出并删除该元素
ls.reverse()将列表反转

将列表改为元组类型:
lt = tuple( [‘c’, ‘d’])
(‘c’, ‘d’)

sorted()可以对列表进行排序

字典类型:
{<键1>:<值1>,<键2>:<值2>,……,<键n>:<值n>}
<字典变量> = {<键1>:<值1>,……,<键n>:<值n>}
<值> = <字典变量>[<值>]
<字典变量>[<值>] = <值>

>>>d = {‘中国’: ‘北京’, ‘美国’: ‘华盛顿’}
>>>d[‘中国’]‘北京’

使用{}生成一个空的字典

>>>de = {};
>>>type(de)//type用于返回变量x的类型<class ‘dict’>

d.update
del d[k]删除字典d中键k对应的数据值
k in d 判断键k是否在字典d中
d.keys()返回字典d中所有的键信息
d.values()返回字典d中所有的值信息
d.items()返回字典d中所有的键值对信息
d.get(k, )键k存在返回相应值,不在
d.pop(k, )键k存在取出相应值,不在
d.popitem()随机从字典中取出一个键值对,以元组形式返回
d.clear()删除所有的键值对
len(d)返回字典d中元素个数

jieba库

分词第三方库
中文文本需要通过分词获得单个的词语

三个模式:
精确模式:把文本精确的切分开,不存在冗余单词
全模式:把文本中所有可能的词语都扫描出来,有冗余
搜索引擎模式:在精确模式的基础上,对长词再次切分

jieba.lcut(s) 精确模式
>>>jieba.lcut(‘中国是一个伟大的国家’)
>>>[‘中国’,‘是’,‘一个’,‘伟大’,‘的’,‘国家’]
jieba.lcut(s,cut_all=True) 全模式
>>>jieba.lcut(‘中国是一个伟大的国家’,cut_all=True)
>>>[‘中国’,‘国是’,‘是’,‘一个’,‘伟大’,‘的’,‘国家’]
jieba.lcut_for_search(s)
>>>jieba.lcut_for_search(‘中华人民共和国是伟大的’)
>>>[‘中华’,‘华人’,‘人民’,‘共和’,‘共和国’,‘中华人民共和国’,‘是’,‘伟大’,‘的’]
jieba.add_word(w)向词典增加新词
>>>jieba.add_word(“蟒蛇语言”)


文件

文本文件:可被认为是长字符串 如txt, py
二进制文件:直接由01组成,没有字符编码例如avi, jpg

读文件:
a.read(size)
a.readline(size)
a.readlines(hint)
写文件:
a.write(s)
a.writelines(lines)
s.seek(offset)
文件打开:
<变量名> = open(<文件名>, <打开模式>)
文件路径名称 文本or二进制 读or写
‘r’只读方式打开,文件不存在返回FileNotFoundError
‘w’覆盖写,文件不存在则创建,存在则覆盖
‘x’创建写模式,文件不存在则创建,存在则返回FileExistsError
‘a’追加写模式,文件不存在则创建,存在在文件后追加内容

‘b’二进制文件模式
‘t’文本文件模式

‘+’与rwxa一同使用,在原功能基础上增加同时读写功能

默认值是 ‘rt’

文件打开:
<变量名>.close()

文件内容读取:
.read(size=-1)
读入全部内容,默认为-1或读入前size长度
.readline(size=-1)
读入一行内容,默认为-1或读入该行前size长度
.readlines(hint=-1)
读入所有行内容,默认为-1或读入前hint行长度

遍历全文本:方法一
fname = input(“请输入要打开的文件名称:”)
fo = open(fname, “r”)
txt = fo.read()
#对全文txt进行处理
fo.close()

遍历全文本:方法二 有助于处理大文件
fname = input(“请输入要打开的文件名称:”)
fo = open(fname, “r”)
txt = fo.read(2)
while txt != “”:
#对txt进行处理
txt = fo.read(2)
fo.close()

逐行遍历文件:方法一
fname = input(“请输入要打开的文件名称:”)
fo = open(fname, “r”)
for line in fo.readlines():
print(line)
fo.close()

逐行遍历文件:方法二
fname = input(“请输入要打开的文件名称:”)
fo = open(fname, “r”)
for line in fo:
print(line)
fo.close()

文件写入:
.write(s) 向文件写入一个字符串
.writelines(lines)
将一个列表全为字符串的列表写入文件

>>>ls = [“中国”, “美国”]
>>>f.writelines(ls)直接拼接后写入文件

中国美国
.seek(offset)改变当前文件操作指针的位置
0- 文件开头 1-当前位置 2-文件结尾

一维数据:
数据读入:
空格分割:
fname.txt:中国 美国
txt = open(fname).read()
ls = txt.split()
f.close()
>>>ls = [‘中国’, ‘美国’]
特殊符号分割:
fname.txt:中国美国txt=open(fname).read()ls=txt.split(“美国 txt = open(fname).read() ls = txt.split(“美国txt=open(fname).read()ls=txt.split(“”)
f.close()
>>>ls = [‘中国’, ‘美国’]

数据写入:
空格分割:
ls = [‘中国’, ‘美国’]
f = open(fname, ‘w’)
f.write(‘ ’.join(ls))
f.close()
特殊符号分割:
ls = [‘中国’, ‘美国’]
f = open(fname, ‘w’)
f.write(‘$’.join(ls))
f.close()
二维数据:
使用列表类型:
[ [3,4,5] [5,6,7] ]两层循环

CSV:Comma-Separated Values
国际通用的一二维数据存储格式,后缀为.csv
每行一个一维数据,由逗号来分开,无空行
可以用excel

数据读入: (从CSV文件中读入数据)
fo = open(fname)
ls = []
for line in fo:
line = line.replace(“\n”, “”)
ls.append(line.split(“,”))
fo.close()

数据写入: (从CSV文件中写入数据)
ls = [ [], [], [] ] #二位列表
f = open(fname, ‘w’)
for item in ls:
f.write(“,”.join(item) + ‘\n’)
f.close()

循环遍历:
#采用二次循环
ls = [ [1,2], [3,4], [5,6] ]
for row in ls:
for column in row:
print(column)

#数据文件写入
fo = open("outpu.txt","w+")
ls = ["中国","美国"]
fo.writelines(ls)fo.seek(0)
#如果没有这个的话就会继续刚才的位置继续读,而不是从头读for line in fo:print(line)
fo.close()
#CalHamletV1.py
#文本词频1
def getText():txt = open("halmet.txt","r").read()txt = txt.lower()for ch in '!"#$%&()*+,-./:;<>=?@[\\]^_"{|}~':txt = txt.replace(ch, " ")return txthamletTxt = getText()
words = hamletTxt.split()
counts = {}
for word in words:counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(10):word, counts = items[i]print("{0:<10}{1:>5}".format(word, counts))
#CalThreeKingdomsV1.py
#文本词频2
import jiebatxt = open("threekindoms.txt","r", encoding="utf-8").read()
words = jieba.lcut(txt)
counts = {}
for word in words:if len(word) == 1:continueelse:counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(15):word, count = items[i]print("{0:<10}{1:>5}".format(word, count))
#CalThreeKingdomsV2.py
#文本词频3
import jiebatxt = open("threekindoms.txt","r", encoding="utf-8").read()
excludes = {"将军","却说","荆州","二人","不可","不能","如此"}
words = jieba.lcut(txt)
counts = {}
for word in words:if len(word) == 1:continueelif word == "诸葛亮" or word == "孔明曰" :rword = "孔明"elif word == "关公" or word == "关云长" :rword = "关羽"elif word == "玄德" or word == "玄德曰" :rword = "刘备"elif word == "孟德" or word == "丞相" :rword = "曹操"else:rword = wordcounts[rword] = counts.get(rword,0) + 1
for word in excludes:del counts[word]
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True)
for i in range(15):word, count = items[i]print("{0:<10}{1:>5}".format(word, count))

wordcloud库

将文本变为词云
w = wordcloud.WordCloud()

w.generate(txt)
向对象w中加载文本txt

>>>w.generate(“Python and WordCloud”)w.to_file(filename)

将词云输出为图像文件,.png或.jpg格式默认为400*200

w = wordcloud.WordCloud(<参数>)
width=600 height=400默认为400*200
min_font_size=10(默认4)
max_font_size=20 最大最小间隔
font_path=“msyh.ttc”指定字体为微软雅黑,默认None
max_words=20 显示最大单词数量,默认200
stop_words=(“Python”)不显示的单词
background_color = “white”

显示不是矩形的词云形状:
>>>from scipy.misc import imread
>>>mk = imread(“pic.png”)
>>>w = wordcloud.WordCloud(mask = mk)

import wordcloudtxt = "life is short, you need Python"
w = wordcloud.WordCloud(\background_color = "white")
w.generate(txt)
w.to_file("pywcloud.png")
import jieba
import wordcloudtxt = "程序设计是计算机能够理解和\
识别用户操作意图的一种交互体系,它按照\
特定规则组织计算机指令,使计算机能够自\
动进行各种运算处理"
w = wordcloud.WordCloud( width=1000,\font_path = "msyh.ttc", height=700)
w.generate(" ".join(jieba.lcut(txt)))
w.to_file("pywcloud.png")
#GovRptWordCloudv1.py
# 政府工作报告
import jieba
import wordcloudf = open("新时代中国特色社会主义.txt", "r", encoding="utf-8")
t = f.read()
f.close()ls = jieba.lcut(t)
txt = " ".join(ls)
w = wordcloud.WordCloud( font_path="msyh.ttc",\width = 1000, height = 700,\background_color="white")
w.generate(txt)
w.to_file("grwordcloud.png")

OS库

os.path.abspath(path)绝对路径
os.path.normpath(path)归一化表示形式,用\ 分割路径
os.path.relpath(path)程序与文件之间的相对路径
os.path.dirname(path)返回文件的目录名称
os.path.basename(path)返回path中最后的文件名称
os.path.join(path, *paths)返回一个组合后的路径字符串
os.path.exists(path)判断该文件是否存在
os.path.isfile(path)判断该字符串是否是个文件
os.path.isdir(path)判断该字符串是否是个目录
os.path.getaatime(path)返回上一次访问时间
os.path.getmtime(path)上一次修改时间
os.path.getctime(path)返回创建时间
os.path.getsize(path)文件大小,单位:字节
os.system(“应用程序”)运行该程序后,正常运行返回一个0
os.system(“应用程序 文件”)用应用程序打开某个文件
os.chdir(path) 修改当前程序操作的路径
os.getcwd()返回当前路径
os.getlogin()获取当前系统登陆用户名称
os.cpu_count()获得CPU数量
os.urandom(n)获得n个字节长度的随机字符串

# Pandas尝试
import pandas as pd
from plotly import figure_factory as FF
from plotly.offline import plotdata=pd.DataFrame([["1111",'ZHJ','OKOK'],["2222",'FZY','HHHH']],columns=("code","name","shit"))
table=FF.create_table(data)
plot(table,show_link=False)

Tips

  1. 将列表中的字符串转为数字
    numbers = [‘1’, ‘5’, ‘10’, ‘8’]变为[1, 5, 10, 8]
    numbers = [ int(x) for x in numbers ]
  2. Scrapy:数据分析高层次应用库
  3. Pyspider:强大的Web页面爬取系统 requests
  4. Beautiful Soup:HTML和XML的解析库
  5. Re正则表达式解析和处理功能库
  6. Python-Goose:提取文章类型web页面功能
  7. Django:构建web系统的基本应用框架, MTV(model模型,Template模板,Views视图)大型的
  8. Pyramid:规模适中的Web应用框架
  9. Flask:Web应用开发微框架
  10. WeRoBot:微信公众号开发框架
  11. aip百度AI开放平台接口
  12. MyQR:生成二维码
  13. PyQt5:Qt开发框架的Python接口 ,完备GUI(图形界面)
  14. wxPython跨平台GUI开发框架
  15. PyGObject使用GTK+开发GUI的功能库
  16. PyGame游戏开发功能基于SDL
  17. Panda3D开源跨平台的3D渲染和游戏开发库
  18. cocos2d:构建2D游戏和图形界面交互式应用的框架,基于OpenGL支持GPU加速
  19. VR Zero 开发VR应用的Python库
  20. pyovr:Oculus VR设备库
  21. Vizard:基于Python的通用VR开发引擎
  22. Quads:迭代的艺术,形成像素风格
  23. ascii_art :ASCII艺术库
  24. Random Art:用turtle
  25. 双层循环
  26. 二位数组初始化a = [[0 for i in range(n)] for j in range(n)]
  27. 输入多个数字hang, num = map(int, input().split(" "))
  28. 多种符号分割的输入a, b, c, d = map(int, re.split(‘

    Python基础课程笔记·嵩天相关推荐

    1. python 慕课课程笔记(一)

      python 慕课课程笔记 1.python 是动态语言,而 java 是静态语言.动态语言变量本身的类型时不固定的,而静态语言在变量定义时就必须指定变量的类别. 2. 在python 代码中书写 a ...

    2. Python基础入门笔记(二)

      前言 本文主要为 Python基础入门笔记(一)内容的补充. 一.迭代器和生成器 1.1 Python迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元 ...

    3. Python基础学习笔记三

      Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...

    4. Python基础学习笔记之(二)

      Python基础学习笔记之(二) zouxy09@qq.com http://blog.csdn.net/zouxy09 六.包与模块 1.模块module Python中每一个.py脚本定义一个模块 ...

    5. Python基础学习笔记之(一)

      Python基础学习笔记之(一) zouxy09@qq.com http://blog.csdn.net/zouxy09 前段时间参加微软的windows Azure云计算的一个小培训,其中Pytho ...

    6. 【Python数据挖掘课程笔记】八.关联规则挖掘及Apriori实现购物推荐

      #2018-03-23 10:48:40 March Friday the 12 week, the 082 day SZ SSMR[Python数据挖掘课程笔记]八.关联规则挖掘及Apriori实现 ...

    7. Python 基础课程第十一天

      Python 基础课程第十一天 第七章模块(module) 1. 模块化(module)程序设计理念 1.1 模块和包概念的进化史 1.2 标准库模块(standard library) 1.3 为什 ...

    8. Python 基础课程第八天

      提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Python 基础课程第八天 第6 章(1) 面向对象初步 方法没有重载 方法的动态性 私有属性和私有方法(实现封装) @proper ...

    9. Python 基础课程第五天

      Python 基础课程第五天 第四章:控制语句 循环结构 for循环和可迭代对象遍历 可迭代对象 range 对象 嵌套循环和综合练习 break 语句 continue 语句 else 语句 循环代 ...

    10. python 基础课程第三天

      文章目录 python 基础课程第三天 字符串 可变字符串 基本运算符 复合赋值运算符 运算符优先级 序列 列表简介 列表的创建 基本语法[]创建 list()创建 range()创建整数列表 推导式 ...

    最新文章

    1. tensorflow和keras的版本问题
    2. mono beta 3 released
    3. gridview自动换行
    4. Logback日志系统配置攻略
    5. mongodb安装教程Linux,Ubuntu16.04手动安装MongoDB的详细教程
    6. mysql高可用 持久层_MyBatis持久层框架使用总结 转载
    7. 2010年06月12日
    8. php如何封装类内乡通南阳的_PHP类(三)-类的封装
    9. 如何安装CocoaPods,以便在Xcode中快速添加第三方库
    10. 到底他怎么赚钱了啊?看来看去也看不出他赚钱了,看来经济头脑有限啊
    11. 怎样使用python画复杂函数_在python中绘制复杂的函数?
    12. 20 世纪 70 年代的太空殖民艺术 1
    13. centos7下发邮件给自己的QQ邮箱
    14. Oracle 12.2 ORA-01017问题处理
    15. 微信小程序实现随机抽签功能
    16. 贝叶斯网络:故障诊断方法研究
    17. 开源免费etl作业批量调度必备软件 Taskctl Free应用版
    18. android手机版excel怎样填充序列号,规范日期数据的极简法。Excel填充功能快速填充序号操作详解。如何制作工作日序列号填充,快速填充功能无法使用...
    19. LSTM Networks应用于股票市场探究
    20. 1.类加载:什么是类加载???什么是类加载器???类加载器有哪三种类型???如何获取类加载器???

    热门文章

    1. RS485转HART协议转换模块 MODBUS转HART转换器
    2. python qt教程视频 下载_PyQt5开发与实战教程,视频教程下载
    3. IOS视频播放器的使用(MPMoviePlayerController)
    4. Tomcat 修改端口号
    5. 苹果cms主题模板M3.1版本 苹果CMSv10自适应主题
    6. python自动答题助手_头脑王者python答题助手
    7. 考研——考研有用的“宝贝”(软件,公众号,网站,励志电影,音乐)
    8. DMS文档内容管理系统
    9. 用C#开发.NET CF蓝牙通信模块
    10. 小觅相机SDK安装与报错解决