Python 速学!不懂怎么入门python的小白看这篇就够了!

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

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

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

大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位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 = ‘[email protected]‘
to_addr = ‘[email protected]‘
msg = ‘From: [email protected]\r\nTo: [email protected]\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 这种充满魅力的语言,请关注我。

原文地址:https://blog.51cto.com/14318113/2396735

时间: 2024-11-05 18:50:20

Python 速学!不懂怎么入门python的小白看这篇就够了!的相关文章

.NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了

作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.html 本来这篇只是想简单介绍下ASP.NET Core MVC项目的(毕竟要照顾到很多新手朋友),但是转念一想不如来点猛的(考虑到急性子的朋友),让你通过本文的学习就能快速的入门ASP.NET Core.既然是快速入门所以过多过深的内容我这里就一笔带过了!然后在后面的一些列文章中再慢慢的对其中的概念进行阐述. 本文已收录至.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规

Python多线程多进程那些事儿看这篇就够了~~

自己以前也写过多线程,发现都是零零碎碎,这篇写写详细点,填一下GIL和Python多线程多进程的坑~ 总结下GIL的坑和python多线程多进程分别应用场景(IO密集.计算密集)以及具体实现的代码模块. 目录   0x01 进程 and 线程 and “GIL” 0x02 python多线程&&线程锁&&threading类 0x03 python队列代码实现 0x04 python之线程池实现 0x05 python多进程并行实现 0x01 进程 and 线程 and “

Python 中的 or and 运算,看这篇就够了

问题出现: Python 中的 or,and 运算,可以写出非常复杂的演算表达式: 看了一些大神的演算规则解释,觉得不是很好理解,有些人甚至理解错了规则. 这里聊一下自己的理解. 其他人是怎么做的: 先看两个例子热下身: return 1 or 2 return 1 and 2 两元的 or and 运算可以通过死记来掌握: 如果有一个值为真,or 立刻返回第一个真值: ...... 如果你记得两元的 or,and 运算规则,你肯定知道正确答案: return 1 or 2 # 返回 1 ret

Storm入门,看这篇就够了

部分一:Srorm 简介 1.1 Storm是实时的数据流,Hadoop是批量离线数据 起源背景 Twitter 开源的一个类似于Hadoop的实时数据处理框架 Storm是由Nathan Marz 在BackType公司[做社交数据分析,数据量大]工作中实现的,这家公司后来被Twitter收购. Ps:·Hadoop分布式存储和分布式计算两个难题全部解决了.但是缺点就是不能实时处理数据,Storm的作者就像写一个这样实时数据处理场景的框架出来 1.2 Storm应用场景[实时处理数据] 推荐系

Zookeeper入门看这篇就够了!!

Zookeeper是什么 官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等. 上面的解释有点抽象,简单来说zookeeper=文件系统+监听通知机制. 1. 文件系统 Zookeeper维护一个类似文件系统的数据结构: 每个子目录项如 NameService 都被称作为 znode(目录节点),和文件系统一样,我们能够

入门Webpack,看这篇就够了

写在前面的话 阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段时间慢慢阅读本文,你的疑惑一定一个一个都会消失:如果你以前没怎么接触过Webpack,而你又你对webpack感兴趣,那么动手跟着本文中那个贯穿始终的例子写一次,写完以后你会发现你已明明白白的走进了Webpack的大门. //一个常见的Webpack配置文件 var webpack = requir

转:入门Webpack,看这篇就够了

写在前面的话 阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段时间慢慢阅读本文,你的疑惑一定一个一个都会消失:如果你以前没怎么接触过Webpack,而你又你对webpack感兴趣,那么动手跟着本文中那个贯穿始终的例子写一次,写完以后你会发现你已明明白白的走进了Webpack的大门. //一个常见的Webpack配置文件 var webpack = requir

入门 Webpack,看这篇就够了

写在前面的话 阅读本文之前,先看下面这个webpack的配置文件,如果每一项你都懂,那本文能带给你的收获也许就比较有限,你可以快速浏览或直接跳过:如果你和十天前的我一样,对很多选项存在着疑惑,那花一段时间慢慢阅读本文,你的疑惑一定一个一个都会消失:如果你以前没怎么接触过Webpack,如果你对webpack感兴趣,本文中有一个贯穿始终的例子,如果你能把这个例子自己动手写一次,写完以后你会发现你已明明白白的走进了Webpack的大门. JavaScript 1 2 3 4 5 6 7 8 9 10

不懂Hadoop心脏Shuffle的原理这一篇就够了(含讲解视频))

学习Hadoop搞明白Shuffle的原理是非常重要的,然而相信很多人看了<Hadoop权威指南4>好几遍,也没有真正搞明白它真正的原理.看完这篇文章,相信会对你理解Shuffle有很大的帮助. 官方给的定义:系统执行排序.将map输出作为输入传给reducer的过程称为Shuffle.(看完是不是一脸懵逼)通俗来讲,就是从map产生输出开始到reduce消化输入的整个过程称为Shuffle.如下图用黑线框出的部分: 圆形缓冲区介绍: 每一个map任务都会有一个圆形缓冲区.默认大小100MB(