Python 编程速成:从基础语法到网络与硬件应用

闻溪
闻溪
发布时间:2026-10-13| 4人浏览过
原创

本文提供 Python 编程速成指南,涵盖字符串操作、数字处理、日期时间、文件系统管理及序列化技术。深入讲解网络通信、邮件收发、网页抓取及多线程编程,并展示如何在树莓派上使用 GPIO 模块。适合希望快速掌握 Python 核心功能与实战应用的开发者。

Python 编程概述

Python 作为一种极具影响力的脚本语言,凭借其强大的功能几乎能胜任各类开发任务。无论是网络爬虫、系统工具、科学计算、Web 开发、游戏制作,还是树莓派等嵌入式设备的应用,Python 都能发挥重要作用。此外,它支持跨平台系统编程,具备极高的通用性。

在人工智能领域,Python 拥有 TensorFlow 等主流库支持机器学习;而在自然语言处理(NLP)方面,NLTK 等库提供了丰富的实现工具。

本文将重点介绍 Python 的基础编程知识,后续章节将结合具体案例进行深入探讨。

字符串操作基础

字符串操作

Python 中的字符串对象是不可变的,这意味着无法直接修改现有字符串的内容。任何对字符串的修改操作都会生成一个新的字符串副本。尽管有此限制,Python 提供了简洁高效的方法来处理字符串。

拼接字符串


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

可以通过加号运算符实现字符串连接,同时 Python 支持对字符串执行乘法运算以实现重复效果。

重复字符串

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 行代码从第二个字符开始输出至末尾。请注意冒号在切片语法中的位置。Python 字符串索引从 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() 函数则将字符串转换为浮点数。


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))

只需指定需要保留的小数位数即可。

自定义精度的数字

在许多实际场景中,需要使用自定义精度的浮点数。

Python 提供了 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 中处理文件非常简单,可以说它是处理文件系统最便捷的语言之一。

复制文件

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])

可以通过指定打开模式来写入文件。Python 提供两种写入模式:写入模式和追加模式。

以下是写入模式的示例,该模式会覆盖文件中的原有内容。


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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。