Python 是一种流行且功能强大的脚本语言,可以做任何事情;您可以执行网页抓取、网络工具、科学工具、Raspberry Pi 编程、Web 开发、视频游戏等等。通过Python编程,无论您使用什么平台,您甚至可以进行系统编程。
说到机器学习,有像 TensorFlow 这样的 Python 库,它为许多人工智能项目提供了支持。
你可以执行自然语言处理(NLP)使用 NLTK 等 Python 库。
我们将在这篇文章中讨论基本的 Python 编程,在以后的文章中将构建工具并查看实际的 Python 编程。
如果您发现这篇文章的内容有点棘手,请告诉我,所以我在接下来的文章中从零开始学习 Python 编程,因为我认为这是针对对 Python 知之甚少的初学者来说的。
操作字符串
Python 中的字符串是不可变的,因此无法更改。对字符串内容的任何更改都需要制作新副本。
在 Python 中处理字符串非常简单。
字符串连接
str = "welcome " + "to Python"
print (str)
我们还可以像这样乘以一个字符串:
字符串乘法
str = "LikeGeeks" * 2
print (str)
与非字符串连接
您可以通过使用 str() 函数将值转换为字符串来连接非字符串,如下所示:
str = "This is test number " + str(15)
print (str)
搜索子字符串
您可以使用 find 方法搜索子字符串,如下所示:
str = "welcome to likegeeks website"
print(str.find("likegeeks"))
find 方法打印 likegeeks 字符串第一次出现的位置。
如果没有找到,它将返回-1作为结果。
The find function starts from the first character. However, you can start from the nth character like this:
str = "welcome to likegeeks website"
print(str.find("likegeeks",12))
Since we start from the 12th character, the word likegeeks doesn’t exist from that position, so it will return -1.
获取子串
这样我们就得到了要搜索的字符串的索引,现在我们要打印匹配的内容。
您可以按索引打印字符串,如下所示:
str = "first second third"
print(str[:2])
print(str[2:])
print(str[3:5])
print(str[-1])
第一个打印行从第一个字符打印到第二个字符,第二个打印行从第二个字符打印到末尾。注意冒号的位置。计数从零开始。
如果使用负数,计数将向后开始,就像第四个打印行,它打印字符串中的最后一个字符。
替换字符串
您可以使用替换方法替换字符串,如下所示:
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))
第一个打印行只是连接两个数字而不求和,而第二个打印行将两个值相加并打印总数。
计算字符串
您可以使用 min()、max() 和 len() 函数来计算最小字符或最大字符值或字符总长度。
str="welcome to likegeeks website"
print(min(str))
print(max(str))
print(len(str))
迭代字符串
您可以迭代字符串并单独操作每个字符,如下所示:
str="welcome to likegeeks website"
for i in range(len(str)):
print(str[i])
len() 函数计算对象的长度。
编码字符串
如果您使用 Python 3,它默认将所有字符串存储为 Unicode 字符串,但如果您使用 Python 2,您可能需要像这样对字符串进行编码:
str="welcome to likegeeks website"
str.encode('utf-8')
操纵数字
你可以像这样在Python中定义数字:
a=15
整数和浮点数的处理方式相同。
如果你有浮点数,你可以使用 int() 函数对其进行舍入,如下所示:
a=15.5
print(int(a))
整数
您可以使用 round() 函数对数字进行舍入,如下所示:
a=15.5652645
print(round(a,2))
只需指定需要舍入的数字数量即可。
用户定义的精度数字
您可能需要使用任意精度的浮点数。您可以使用十进制模块来处理用户定义精度的数字。
首先,像这样导入模块:
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))
操纵日期和时间
Python 编程语言提供了一个名为 datetime 的模块,可以帮助处理日期、时间。
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() 方法采用格式规范,并根据该格式设置日期或时间的格式。
下表指定了一些可以使用的格式选项:
%a |
Prints locale abbreviated name of the weekday. |
%A |
Prints the weekday. |
%w |
Prints the day of the week as a number. |
%d |
Prints the day of the month as a zero-padded number. |
%b |
Prints the month as a locale abbreviated name. |
%B |
Prints the month as locale full name. |
%m |
Prints the month as a zero-padded number. |
%y |
Prints the year as a zero-padded two-digit number. |
%Y |
Prints the year as a zero-padded four-digit number. |
%H |
Prints the hour (24-hour clock) as a zero-padded number. |
%I |
Prints the hour (12-hour clock) as a zero-padded number. |
%p |
Prints AM or PM. |
%M |
Prints the minute as a zero-padded number. |
%S |
Prints the second as a zero-padded number. |
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(年=2015年,月=11,日=21)
处理文件系统
在 Python 编程中处理文件非常容易,不管你信不信,这是你可以用来处理文件的最简单的语言。你可以说 Python 是做很多事情最简单的语言。
复制文件
Shutil 模块包含复制文件的功能。
import shutil
copied_path = shutil.copy('my_file.txt', 'copied_file.txt')
如果 my_file.txt 是符号链接,则上述代码将创建 Copy_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)
您可以编写任何文件扩展名,例如 *.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()
您可以使用 gzip 模块或 bz2 模块压缩 gz 或 bz 文件。
import gzip
import bz2
gz_file=gzip.GzipFile('files.gz','r')
bz_file=bz2.BZ2File('fiels.bz2','r')
然后你就可以用同样的方式阅读和写作。
您可以使用以下命令处理 rar 文件unrar包裹。首先,安装包:
pip install unrar
然后你就可以用同样的方法来使用它。
import unrar.rarfile
m=unrar.rarfile.RarFile('file.rar')
m.namelist()
m.extractall()
解析 CSV 文件
您可以使用 pandas 来解析 CSV 文件。该软件包可以解析 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')
如果你有多张纸,你可以这样加载:
data = pd.ExcelFile('file.xls')
您可以像这样写入 Excel 文件:
data.to_excel('file.xls', sheet='Sheet1')
网络和连接
Python语言有一个socket类,它提供了一种底层访问网络的方式;它必须支持许多网络协议。
import socket
host = '192.168.1.5'
port = 5050
m_sock = socket.create_connection ((host, port))
这段代码我们在端口 5050 上建立了与 IP 192.168.1.5 上主机的连接。
之后就可以发送和接收数据了。
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
为了接收数据,您需要告诉方法一次读入多少字节。
data_in = m_sock.recv(2000)
这是可行的,因为您确信消息的长度小于 2000 字节。
如果消息很大,您必须一遍又一遍地循环,直到收集到所有单独的块。
buffer = bytearray(b' ' * 2000)
m_sock.recv_into(buffer)
这里我们定义一个空的缓冲区;然后,我们开始将消息写入缓冲区。
从 POP 邮件服务器读取电子邮件
我们已经讨论过Linux邮件服务器以及关于它的一切,现在,我们如何使用 Python 编程来访问它?
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 服务器的使用后,请不要忘记关闭所有打开的连接。
pop_serv.quit()
从 IMAP 邮件服务器读取电子邮件
您可以与IMAP 电子邮件服务器使用 imaplib 模块。
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')
然后,您可以迭代数据变量中返回的电子邮件索引并获取消息。
msg = my_imap.fetch(email_id, '(RFC822)')
最后,不要忘记关闭连接:
my_imap.close()
my_imap.logout()
发送电子邮件
您可以使用 smtplib 使用 SMTP 协议发送电子邮件。
import smtplib, getpass
my_smtp = smtplib.SMTP(smtp.server.com')
my_smtp.login("myuser", getpass.getpass())
如果您在您的计算机上使用 SSLSMTP服务器,您应该改用 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 表单,您知道应该向网页发送 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,有很多方法可以实现这一点。
创建一个迷你服务器
套接字类支持侦听传入连接。
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与 Raspberry Pi 配合使用。
首先,在 Raspberry PI 中安装该软件包,如下所示:
$ sudo apt-get install python-dev python-rpi.gpio
现在您可以在脚本中使用它。您可以在 Raspberry Pi 的 GPIO 总线上写入输出:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(1, GPIO.OUT, initial=GPIO.LOW)
GPIO.output(1, GPIO.HIGH)
从 Raspberry Pi 的 GPIO 读取
您可以使用 RPi.GPIO Python 模块从 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 编程语言基础知识,然后我们就可以开始构建出色的工具。
我希望你喜欢这篇文章。继续回来。
谢谢。