Python 编程速成(推荐)


Posted in Python onApril 15, 2019

Python是一种非常流行的脚本语言,而且功能非常强大,几乎可以做任何事情,比如爬虫、网络工具、科学计算、树莓派、Web开发、游戏等各方面都可以派上用场。同时无论在哪种平台上,都可以用 Python 进行系统编程。

机器学习可以用一些 Python 库来实现,比如人工智能常用的TensorFlow。也可以用像 NLTK 这样的 Python 库进行自然语言处理(NLP)。

本文讨论基本的 Python 编程,后续会写一些 Python 编程的实际案例。

操作字符串

Python 中的字符串是不可变的,所以不能直接修改。对字符串内容的任何更改都需要产生新的副本。在 Python 中处理字符串非常简单。

拼接字符串

str = "welcome " + "to Python" 
print (str)

这是字符串连接,你也可以对字符串做乘法操作:

重复字符串

str = "Python" * 2 print (str)

与非字符串拼接

可以用 str() 函数将非字符串的值转换为字符串,然后再连接,如下所示:

str = "This is test number " + str(15) 
print (str)

搜索子字符串

可以使用 find() 方法搜索子字符串,如下所示:

str = "welcome to Python" 
print(str.find("Python"))

如果找到了字符串"Python",则 find 方法会返回第一次出现这个字符串的位置。

如果没有找到,则返回 -1。

find 函数默认从第一个字符开始搜索,也可以从第n个字符开始,如下所示:

str = "welcome to Python" 
print(str.find("Python",12))

因为我们从第12个字符开始,所以找不到 Python 这个单词,所以它会返回 -1。

获取子字符串

所以我们得到了我们要搜索的字符串的索引,现在我们要打印匹配的字符串。

你可以按索输出印字符串,如下所示:

str = "first second third" 
print(str[:2]) 
print(str[2:]) 
print(str[3:5]) 
print(str[-1])

在第 2 行的代码会打印第一个和第二个字符,而第 3 行会从第二个字符开始打印到结束。要注意代码中结冒号的位置。字符串从 0 开始计数。

如果使用负数,则会从最后开始计数。第 5 行代码会打印最后一个字符。

替换字符串

你可以用如下方法替换字符串:

str = "This website is about programming" 
str2 = str.replace("This", "That") 
print(str2)

如果你想替换的字符串多次出现,但是只想替换第一次出现的,可以指定位置:

str = "This website is about programming I like this website" 
str2 = str.replace("website", "page",1) 
print(str2)

第一个词只被替换了。

去除字符串两端的空格

可以用 strip 方法去掉字符串两端的空格,如下所示:

str = " This website is about programming "
print(str.strip())

你可以用rstrip仅去除最右的空格,或者用 lstrip 去除最左边的空格。

改变字符大小写

在某些情况下你可能需要改变字符的大小写。

str="Welcome to likegeeks" 
print(str.upper()) 
print(str.lower())

将字符串转换为数字

前面学到了用 str()函数将数字转为字符串,但这不是 Python 中唯一的转换函数,另外还有 int() 、float()、long()和其他强制转换函数。

int() 可以把输入的字符串转为整数,float() 函数将字符串转为float。

str="10" 
str2="20" 
print(str+str2) 
print(int(str)+int(str2))

第 3 行只是连接两个字符串,而第 4 行把两个值相加并输出结果。

字符串计数

可以用min()找到字符串中 ASCII 值最小的字符,max()找到最大的字符,用len()函数得到字符的总长度。

str="welcome to Python" 
print(min(str)) 
print(max(str)) 
print(len(str))

迭代字符串

可以用 for 迭代字符串并单独操作每个字符,如下所示:

str="welcome to likegeeks website" 
for i in range(len(str)):
 print(str[i])

其中 len() 函数用来得到字符串的长度。

字符串编码

如果你使用的是Python 3,默认情况下所有字符都是 Unicode 字符集编码,但是如果用的是Python 2,可能需要对字符串进行编码,如下所示:

str="welcome to Python" 
str.encode('utf-8')

操作数字

在 Python 中定义数字变量的方式如下:

a=15

可以定义整数,也可以定义浮点数。

浮点数可以用 int()函数进行舍入,如下所示:

a=15.5 
print(int(a))

舍入数字

可以用 round() 函数对数字进行舍入:

a=15.5652645
print(round(a,2))

只需指定需要舍入到小数点后几位。

自定义精度的数字

很多情况下会用到自定义精度的浮点数。

可以处理用户自定义精度数的 decimal 模块。

这样导入模块并使用:

from decimal import *

a=Decimal(5.5)

生成随机数

Python 中的 random 模块提供了生成随机数的函数。

import random

print(random.random())

生成的随机数介于 0.0 和 1.0 之间。

可以从自己定义的范围中生成一个随机数,如下所示:

import random

numbers=[1,2,3,4,5,6,7]
print(random.choices(numbers))

操作日期和时间

你可以从日期中提取所需的值,如下所示。

import datetime

cur_date = datetime.datetime.now() 
print(cur_date) 
print(cur_date.year) 
print(cur_date.day) 
print(cur_date.weekday()) 
print(cur_date.month) 
print(cur_date.time())

可以得到两个时间或日期之间的差,如下所示:

import datetime

time1 = datetime.datetime.now() 
time2 = datetime.datetime.now() 
timediff = time2 - time1 
print(timediff.microseconds())

上例中的 timediff 变量是 timedelta 类型的对象,你也可以自己创建这种对象:

time1 = datetime.datetime.now() 
time2 = datetime.timedelta(days=3) 
time3=time1+time2 
print(time3.date())

格式化日期和时间

可以用 strftime() 格式化日期或时间。

下表指定了一些常用的格式选项:

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
import datetime

date1 = datetime.datetime.now() 
print(date1.strftime('%d. %B %Y %I:%M%p'))

从字符串创建日期

可以用 strptime()函数从字符串创建日期,如下所示:

date1=datetime.datetime.strptime(“2015-11-21”, “%Y-%m-%d”)

也可以像这样创建:

date1= datetime.datetime(year=2015, month=11, day=21)

处理文件系统

在 Python 中处理文件非常容易,不管你信不信,在所欲语言中是是最简单的。当然你也可以说 Python 是一种做什么事情都最简单的语言。

复制文件

shutil 模块中包含用于复制文件的功能。

import shutil 
copied_path = shutil.copy('my_file.txt', 'copied_file.txt')

如果 my_file.txt 是一个软连接的话,那么上面的代码将会把 copied_file.txt 创建为独立的文件。

你也可以创建一个软链接的副本,如下所示:

copied_path = shutil.copy('my_file.txt', 'copied_file.txt',follow_symlinks=False)

移动文件

你可以像这样移动一个文件:

import shutil 
shutil.move('file1.txt', 'file3.txt')

也可以使用 os 模块中的 rename 函数重命名文件,如下所示:

import os 
os.rename('file1.txt', 'file3.txt')

读写文本文件

可以用 open 函数打开文件,然后再用 read 或write 方法进行读写。

fd = open('file1.txt') 
content = fd.read() 
print(content)

首先,使用 open 函数打开文件并读取,然后我再用 read 函数读取文件内容,最后,将得到的内容放入变量 content 中。

你可以指定 read()()函数读取的字节数:

fd.read(20)

如果文件不是太大的话,你可以将整个内容读入一个列表,然后再遍历列表打印输出。

content = fd.readlines() 
print(content[0])

可以通过指定打开的模式来写入文件。有两种写入模式,即写入模式和追加模式。

下面是写入模式,会覆盖掉文件中的旧内容。

fd = open('file1.txt','w') 
content = fd.write('YOUR CONTENT GOES HERE')

下面是附加模式:

fd = open('file1.txt','a') 
content = fd.write('YOUR CONTENT GOES HERE')

创建目录

可以用 os模块中的 mkdir 函数创建一个新目录,如下所示:

import os

os.mkdir('./NewFolder)

如果目录已经存在将会引发错误。不过不用担心,在以后的文章中会讨论异常处理,可以帮你避免此类错误。

获取访问和修改以及创建时间可以用 getmtime()、 getatime() 和 getctime() 分别获取修改时间、访问时间和创建时间。

返回的时间格式为 Unix 时间戳,我们可以把它转换为人类可读的格式,如下所示:

import os 
import datetime

tim=os.path.getctime('./file1.txt') 
print(datetime.datetime.fromtimestamp(tim))

迭代文件

你可以用 os 模块中的 listdir() 函数来获取文件:

import os

files = os.listdir('.')
print(files)

此外,你可以用 glob 模块执行相同的操作:

import glob 
files = glob.glob('*') 
print(files)

你可以为 glob()设定任何一种扩展名,例如设定为 * .doc 获取所有word文档。

序列化Python对象

此过程用于将 Python 对象序列化为字节流,以便以后重用。

你可以用 pickle 模块做到这一点:

import pickle

fd = open('myfile.pk ', 'wb') 
pickle.dump(mydata,fd)

可以用 load() 函数反序列化此数据,如下所示:

import pickle

fd = open('myfile.pk ', 'rb') 
mydata = pickle.load(fd)

压缩文件

Python 标准库使你可以处理不同格式的压缩文件,如tar,zip,gzip,bzip2。

要处理 zip文件,你可以使用 zipfile模块:

import zipfile

my_zip = zipfile.ZipFile('zipped_file.zip', mode='r') 
print(file.namelist())

你可以把一个文件压缩成 zip 格式,如下所示:

import zipfile

file=zipfile.ZipFile('files.zip','w') 
file.write('file1.txt') 
file.close()

可以用 extractall() 方法提取 zip 压缩包中的文件:

import zipfile

file=zipfile.ZipFile('files.zip','r') 
file.extractall() 
file.close()

另外还可以用附加模式将文件附加到现有的zip文件,如下所示:

import zipfile

file=zipfile.ZipFile('files.zip','a') 
file.write('file2.txt') 
file.close()

在处理 gz 或 bz 文件时,可以用和上面相同的套路。不过要导入 gzip 模块或 bz2 模块。

import gzip 
import bz2

gz_file=gzip.GzipFile('files.gz','r') 
bz_file=bz2.BZ2File('fiels.bz2','r')

然后用同样的方式读写。

你可以使用 unrar 包处理rar文件。首先,安装包:

pip install unrar

然后用同样的方式使用。

import unrar.rarfile

m=unrar.rarfile.RarFile('file.rar') 
m.namelist() 
m.extractall()

解析CSV文件

一个非常有用的包叫做 pandas。它可以解析 CSV 和 Excel 文件,并轻松地从中提取数据。

首先,安装包

pip install pandas

然后你可以在自己的代码中使用它,如下所示:

import pandas

data=pandas.read_csv('file.csv)

默认情况下,Pandas 将第一列视为每行的标签。如果列索引不是第一列,则可以通过传递 index_col 参数来指定列索引。

如果文档中没有行标签,则应使用参数 index_col = False。

要写入CSV文件,可以使用 to_csv() 方法。

data.to_csv('file.csv)

解析Excel文件

可以用 pandas 模块中的 read_excel() 方法来解析excel文件。

data = pd.read_excel('file.xls', sheetname='Sheet1')

如果有多个工作表,可以这样加载:

ta = pd.ExcelFile('file.xls')

这样写入excel文件:

ta.to_excel('file.xls', sheet='Sheet1')

网络和连接

Python 有一个 socket 类,它提供了一种通过低级 API 访问网络的方法,它支持许多网络协议。

import socket 
host = '192.168.1.5' 
port = 5050 
m_sock = socket.create_connection ((host, port))

这段代码与 IP 地址为 192.168.1.5 的主机通过 5050 端口建立连接。

打开 socket 后,就可以发送和接收数据了。

m_sock.sendall(b'Hello World')

注意,我在字符串之前使用了 b 字符,因为数据需要是字节字符串。

如果发送的数据太大,你应该通过循环分割并发送,如下所示:

msg = b'Longer Message Goes Here' 
mesglen = len(msg)
total = 0
while total < msglen: 
 sent = m_sock.send(msg[total:])
 total = total + sent

要接收数据,你需要告诉 recv() 方法一次读入多少个字节。

data_in = m_sock.recv(2000)

这是有效的,因为你能够确定发送的消息长度小于2000个字节。

如果消息很大,则必须反复循环,直到收到所有的数据块。

buffer = bytearray(b' ' * 2000) 
m_sock.recv_into(buffer)

在这里定义了一个空缓冲区,然后将消息写入缓冲区。

从POP邮件服务器接收电子邮件 poplib 模块使你可以与 POP 服务器进行通信。

import getpass,poplib

pop_serv = poplib.POP3('192.168.1.5') 
pop_serv.user("myuser") 
pop_serv.pass_(getpass.getpass())

getpass 模块可以安全地处理密码。

如果需要安全连接,可以用 POP3_SSL 类。

要获取邮件列表和邮件计数,可以这样做:

msg_list = pop_serv.list() # to list the messages 
msg_count = pop_serv.msg_count() # to get message count

处理完毕后,一定要记得关闭所有打开的连接。

pop_serv.quit()

从IMAP邮件服务器接收电子邮件

可以用 imaplib 模块与 IMAP 邮件服务器通信。

import imaplib, getpass

my_imap = imaplib.IMAP4('imap.server.com') 
my_imap.login("myuser", getpass.getpass())

如果你的 IMAP 服务器上使用 SSL,则应用 IMAP4_SSL 类。

要获取电子邮件列表,需要先执行查询操作:

data = my_imap.search(None, 'ALL')

然后,通过迭代 data 变量中的邮件索引获取邮件内容

msg = my_imap.fetch(email_id, '(RFC822)')

最后,不要忘记关闭连接:

my_imap.close() 
my_imap.logout()

发送电子邮件

想要通过 SMTP 协议发送电子邮件。可以用 smtplib 。

import smtplib, getpass

my_smtp = smtplib.SMTP(smtp.server.com') 
my_smtp.login("myuser", getpass.getpass())

如果在 SMTP服务器上使用SSL,则应用 SMTP_SSL 类。

打开连接后,你可以这样发送邮件:

from_addr = 'me@example.com' 
to_addr = 'you@example.com' 
msg = 'From: me@example.com\r\nTo: you@example.com\r\n\r\nHello, this is a test message' 
my_smtp.sendmail(from_addr, to_addr, msg)

抓取网页

要与Web服务器进行通信,需要用到 urllib.request 子模块。

import urllib.request

my_web = urllib.request.urlopen('https://www.google.com') 
print(my_web.read())

提交 Web 表单

如果你想要提交 Web 表单,应该向网页发送POST请求。

import urllib.request 
my_data = b'Your Data Goes Here' 
my_req = urllib.request.Request('http://localhost', data=my_data,method='POST') 
my_frm = urllib.request.urlopen(my_req) 
print(my_frm.status)

另外还可以用 mechanize或 urllib2 模块,还有很多方法可以实现这个功能。

创建一个微型服务器

socket 类支持侦听连接请求。

import socket

host = ''
port = 3535 
my_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
my_server.bind((host, port)) 
my_server.listen(1)

现在你可以接受这样的连接请求:

addr = my_server.accept() 
print('Connected ... ', addr) 
data = conn.recv(1024)

最后不要忘记在操作完成后关闭连接

conn.close()

Python 中的线程

并发运行任务是非常有用的,Python 有一个名为 threading 的模块,它包含一个 Thread 类。

import threading 
def print_message(): 
 print('The message got printed from a different thread') 
my_thread = threading.Thread(target=print_message) 
my_thread.start()

如果函数需要很长时间才能完成,可以用 is_alive()方法检查它是否仍在运行。

有时你的线程需要安全地访问全局资源。这时候就需要用到锁。

import threading
num = 1 
my_lock = threading.Lock()
def my_func():
 global num, my_lock
 my_lock.acquire()
 sum = num + 1
 print(sum)
 my_lock.release() 
my_thread = threading.Thread(target=my_func)
my_thread.start()

使用树莓派

使用树莓派是一种价格便宜的单板电脑,可以在上面开发各种有趣的应用。

可以用 Python 的 RPi.GPIO 模块使树莓派与外接的传感器通信。

首先,在你的树莓派中安装包,如下所示:

$ sudo apt-get install python-dev python-rpi.gpio

然后你就能在Python脚本中使用它了。可以在树莓派的 GPIO 总线上写输出:

import RPi.GPIO as GPIO 
GPIO.setmode(GPIO.BOARD) 
GPIO.setup(1, GPIO.OUT, initial=GPIO.LOW) 
GPIO.output(1, GPIO.HIGH)

通过树莓派的GPIO中读取数据你可以用 RPi.GPIO 模块从 GPIO 接口读取数据,如下所示:

import RPi.GPIO 
RPi.GPIO.setup(1, GPIO.IN)
if RPi.GPIO.input(1):
 print('Input was HIGH') 
else:
 print('Input was LOW')

以上只是 Python 的一小部分基础知识,还有很长的路需要走。

总结

以上所述是小编给大家介绍的Python 编程速成,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python发送邮件示例(支持中文邮件标题)
Feb 16 Python
用实例解释Python中的继承和多态的概念
Apr 27 Python
使用Python的Tornado框架实现一个Web端图书展示页面
Jul 11 Python
利用Hyperic调用Python实现进程守护
Jan 02 Python
一条命令解决mac版本python IDLE不能输入中文问题
May 15 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
使用Python机器学习降低静态日志噪声
Sep 29 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
keras模型保存为tensorflow的二进制模型方式
May 25 Python
Python中openpyxl实现vlookup函数的实例
Oct 28 Python
Python os库常用操作代码汇总
Nov 03 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 Python
值得收藏的10道python 面试题
Apr 15 #Python
Python 学习教程之networkx
Apr 15 #Python
Python OS模块实例详解
Apr 15 #Python
Python日期时间Time模块实例详解
Apr 15 #Python
Python3.6中Twisted模块安装的问题与解决
Apr 15 #Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
Apr 15 #Python
Python Datetime模块和Calendar模块用法实例分析
Apr 15 #Python
You might like
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
PHP 程序员的调试技术小结
2009/11/15 PHP
php中获得视频时间总长度的另一种方法
2011/09/15 PHP
用PHP提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
PHP编写RESTful接口
2016/02/23 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
php简单检测404页面的方法示例
2019/08/23 PHP
javascript 点击整页变灰的效果(可做退出效果)。
2008/01/09 Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
2013/05/08 Javascript
jQuery插件制作之参数用法实例分析
2015/06/01 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
Vue中的v-for指令不起效果的解决方法
2018/09/27 Javascript
js实现导航跟随效果
2018/11/17 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
python编写网页爬虫脚本并实现APScheduler调度
2014/07/28 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
2018/12/18 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
.NET概念性的面试题
2012/02/29 面试题
班级寄语大全
2014/04/10 职场文书
英语课外活动总结
2014/08/27 职场文书
2014年个人委托书范本
2014/10/13 职场文书
小学中等生评语
2014/12/29 职场文书
婚礼答谢词
2015/01/04 职场文书
幼儿园2016年圣诞活动总结
2016/03/31 职场文书
2016年小学感恩节活动总结
2016/04/01 职场文书
Python装饰器详细介绍
2022/03/25 Python
MySQL中order by的执行过程
2022/06/05 MySQL