【Python】标准库的使用
椰椰椰耶 2024-09-16 08:05:07 阅读 79
文章目录
标准库日期计算字符串操作剑指offer 58,翻转单词顺序思路
leetcode 2255,统计是给定字符串前缀的字符串数目思路
文件查找工具
Python 通过模块来体现“库”
降低了程序猿的学习成本提高了程序的开发效率
库 就是是别人已经写好了的代码,可以让我们直接拿来用
荀子曰: “君子性非异也,善假于物也”
一个编程语言能不能流行起来,一方面取决于语法是否简单方便容易学习,一方面取决于生态是否完备
所谓的 “生态” 指的就是语言是否有足够丰富的库, 来应对各种各样的场景
实际开发中,也并非所有的代码都自己手写,而是要充分利用现成的库,简化开发过程
按照库的来源,可以大致分成两大类
标准库:Python
自带的库,只要安装了 Python
就可以直接使用第三方库:其他人实现的库,要想使用,需要额外安装,种类非常庞大
标准库
Python
自身内置了非常丰富的库.,在 Python
官方文档上可以看到这些库的内容
https://docs.python.org/3.10/library/index.html
简单来说, 主要是这些部分:
内置函数 (如 print
,input
等)内置类型 (针对 int
,str
,bool
,list
,dict
等类型内置的操作).文本处理时间日期数学计算文件目录数据存储 (操作数据库,数据序列化等).加密解密操作系统相关并发编程相关 (多进程, 多线程, 协程, 异步等).网络编程相关多媒体相关 (音频处理, 视频处理等)图形化界面相关…
日期计算
输入任意的两个日期,计算两个日期之间隔了多少天
使用 import
语句导入标准库的 datetime
模块使用 datetime.datetime
构造两个日期,参数使用年,月,日这样的格式两个日期对象相减,即可得到日期的差值
import datetime
date1 = datetime.datetime(2004,2,23)
date2 = datetime.datetime(2024,9,1)
print(date2 - date1)
"""
运行结果
7496 days, 0:00:00
"""
或者这样行写
from datetime import datetime
date1 = datetime(2004,2,23)
date2 = datetime(2024,9,1)
print(date2 - date1)
"""
运行结果
7496 days, 0:00:00
"""
或者这样写,将模块名重命名一下
import datetime as dt
date1 = dt.datetime(2004,2,23)
date2 = dt.datetime(2024,9,1)
print(date2 - date1)
关于
datetime
的更多操作,可以参考官方文档
https://docs.python.org/3/library/datetime.html
字符串操作
字符串是 Python
的内置类型,字符串的很多方法不需要导入额外的模块,即可直接使用
剑指offer 58,翻转单词顺序
https://leetcode.cn/problems/fan-zhuan-dan-ci-shun-xu-lcof/description/
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"
I am a student.
“,则输出"student. a am I
”。
思路
针对上述字符串,使用空格进行切分。<code>split 方法,可以指定分隔符,把字符串分成多个部分,放到一个 list
里面针对方才的切分结果列表,进行逆序==> reverse
将逆序后的列表,组合起来==> join
def reverseWords(s: str):
tokens = s.split(' ')
tokens.reverse()
return ' '.join(tokens)
s: str
是声明 s
是一个字符串变量
leetcode 796,旋转字符串
https://leetcode.cn/problems/rotate-string/
给定两个字符串,
s
和goal
。如果在若干次旋转操作之后,s
能变成goal
,那么返回true
。
s
的旋转操作就是将s
最左边的字符移动到最右边。
例如,若
s = 'abcde'
,在旋转一次之后结果就是'bcdea'
思路
使用 <code>len 求字符串的长度,如果长度不相同,则一定不能旋转得到将 s
和自己进行拼接,然后直接使用 in
方法来判定 goal
是否是 s + s
的子串.
def rotateSstring(s, goal):
if len(s) != len(goal):
return False
return goal in (s+s)
leetcode 2255,统计是给定字符串前缀的字符串数目
https://leetcode.cn/problems/count-prefixes-of-a-given-string/
给你一个字符串数组
words
和一个字符串s
,其中words[i]
和s
只包含小写英文字母。
请你返回
words
中是字符串s
前缀的字符串数目。
一个字符串的 前缀 是出现在字符串开头的子字符串。子字符串是一个字符串中的连续一段字符序列
思路
遍历 <code>words,取出每个字符串判定当前这个字符串是否是 s
的前缀(s
是否是以这个字符串开头的)==>startwith
def countPrefixes(words: list, s: str):
count = 0
for word in words:
if s.startswith(word):
count += 1
return count
关于字符串的更多操作, 参考官方文档
https://docs.python.org/3/library/stdtypes.html#str
文件查找工具
搜索的关键就是对目录结构进行遍历
递归查找,遇到子目录,就进到目录里面进行查找
import os
inputPath = input('请输入待搜索路径: ')
pattern = input('请输入待搜索关键词: ')
for dirpath, dirnames, filenames in os.walk(inputPath):
for f in filenames:
if pattern in f:
print(f'{ dirpath}/{ f}')
os.walk
是一个遍历操作系统目录非常好用的一个办法
只需要使用简单的循环就能完成递归遍历目录的操作,不必手写递归代码os
传入的参数就是要从哪个目录开始进行遍历 dirpath
表示遍历到当前位置,对应的路径是什么dirnames
表示当前目录下都有哪些目录,是一个列表,可以包含多个目录dirnames
表示当前目录下都有哪些文件名,是一个列表,可以包含多个文件名os.walk
每次调用,都能自动的去针对子目录进行递归的操作,只需要使用上述循环,就可以把所有的路径都获取出来
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。