Python学习总结 自用,2024年最新2024年Python社招面试题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

print(data)
#this is Tuesday

空格也会被视为字符


###### 字符串运行算回切片获取



![](https://img-blog.csdnimg.cn/img_convert/f137b4ef212831a43d51483b5a999b9b.png)


###### 自定义函数



def 函数名(参数列表):
//实现特定功能的多行代码
[return [返回值]]


###### 匿名函数


对于定义一个简单的函数,Python 还提供了另外一种方法,lambda 表达式,又称匿名函数,常用来表示内部仅包含 1 行表达式的函数。如果一个函数的函数体仅有 1 行表达式,则该函数就可以用 lambda 表达式来代替。



name = lambda [list] : 表达式

def name(list):
return 表达式
name(list)



![](https://img-blog.csdnimg.cn/img_convert/1497dc3ae84460590d5af2219d59bbbe.png)



###### 类


class 类名:


多个(≥0)类属性...


多个(≥0)类方法...


构造方法


在创建类时,我们可以手动添加一个\_\_init\_\_() 方法,该方法是一个特殊的类实例方法,称为构造方法(或构造函数)



def init(self,…):
代码块


类的构造方法最少也要有一个 self 参数。self 所表示的都是实际调用该方法的对象。无论是类中的构造函数还是普通的类方法,实际调用它们的谁,则第一个参数 self 就代表谁。相当于Java的this。


类的实例化  
 创建类对象的过程,又称为类的实例化。类名(参数)。


定义的类只有进行实例化后,才能得到利用。实例化后的类对象可以执行以下操作:



class Dog:
def init(self, name, breed, age):
self.name = name
self.breed = breed
self.age = age

my_dog = Dog(‘Buddy’, ‘Golden Retriever’, 6)


公有属性:指没有加前缀双下划线\_\_的属性,可以在类内外被访问,也可以被继承和重写。


私有属性:指加了前缀双下划线\_\_的属性,只能在类内被访问和修改,而在类外部无法访问或修改。


实例属性:指定义在 \_\_init\_\_ 方法中,以 self.属性名 的形式定义的属性,每个实例都独立拥有一个自己的实例属性,它们随实例创建和销毁。


静态属性:指在类下直接定义的属性,可以使用类名直接访问,它们是类的属性,每个实例都共享一个静态属性。



![](https://img-blog.csdnimg.cn/img_convert/2c8cd236df4a307dc318b9f995364e07.png)



class revealAccess:
def init(self, initval = None, name = ‘var’):
self.val = initval
self.name = name
def get(self, obj, objtype):
print(“Retrieving”,self.name)
return self.val
def set(self, obj, val):
print(“updating”,self.name)
self.val = val


###### IO处理


Python 提供了内置的文件对象,以及对文件、目录进行操作的内置模块,通过这些技术可以很方便地将数据保存到文件(如文本文件等)中。


在 Windows 上,路径书写使用反斜杠 “” 作为文件夹之间的分隔符,但在 OS X 和 Linux 上,使用正斜杠 “/” 作为它们的路径分隔符。需要两个第一个是转义字符。


对文件的系统级操作功能单一,比较容易实现,可以借助 Python 中的专用模块(os、sys 等),并调用模块中的指定函数来实现。



import os
os.remove(“a.txt”)


打开文件:使用 open() 函数,该函数会返回一个文件对象;


对已打开文件做读/写操作:读取文件内容可使用read()、readline() 以及 readlines()函数;向文件中写入内容,可以使用 write() 函数。


关闭文件:完成对文件的读/写操作之后,最后需要关闭文件,可以使用close()函数。


如果想要操作文件,首先需要创建或者打开指定的文件,并创建一个文件对象,而这些工作可以通过内置的 open()函数实现:



file = open(file_name [, mode=‘r’ [ , buffering=-1 [ , encoding = None ]]])



![](https://img-blog.csdnimg.cn/img_convert/7f700b61ef2f512a5c85c1437825d675.png)


### 3. OS


#### a. 绝对路径三种表达方式


单斜杠 /


双反斜杠 \\


在路路径前加上字母 r


#### b. os.getcwd()


获取当前文件所在的路径



import os
print(os.getcwd())


#### c. os.chdir(path)


更改当前路径,更改后,默认路径为更改后的路径



os.chdir(r’D:\临时\python试验\pandas’)
os.getcwd()


#### d. os.path.split(path) 将path分割成目录和文件名二元组返回


以路径最后一个'/'为分隔,分隔路径与文件名。若路径中无文件名,则输出路径与空文件名。



import os
path = ‘/home/User/Desktop/file.txt’
head_tail = os.path.split(path)
print(“Head of ‘% s:’” % path, head_tail[0])
print(“Tail of ‘% s:’” % path, head_tail[1], “\n”)

path = ‘/home/User/Desktop/’
head_tail = os.path.split(path)
print(“Head of ‘% s:’” % path, head_tail[0])
print(“Tail of ‘% s:’” % path, head_tail[1], “\n”)

path = ‘file.txt’
head_tail = os.path.split(path)
print(“Head of ‘% s:’” % path, head_tail[0])
print(“Tail of ‘% s:’” % path, head_tail[1])



![](https://img-blog.csdnimg.cn/img_convert/3b0a9b11fc0d7ef8c8dffdab230f8cea.png)


#### e. os.path.basename(p)


获取路径中的最后一个文件夹名字



print(os.path.basename(r’D:\临时\python试验\pandas’))
#pandas


注意,若传入的路径为文件,如 r'D:\临时\python试验\pandas\test.txt',返回的结果是文件名 test.txt。


返回path的文件名,等同于os.path.split(path)[1]


#### f. os.path.dirname(p)


返回path的目录,相当于os.path.[split]( )(path)[0]


#### g. os.path.splitext(path)将路径的文件名{只是名称}和后缀名分开



import os
file_path = “D:/test/data_expand/192.168.1.70_01_20210901163745710_250_150_4…jpg”
filename,extension = os.path.splitext(file_path)
print(“filename:”,filename) # D:/test/data_expand/192.168.1.70_01_20210901163745710_250_150_4…
print(“extension:”,extension) # .jpg

file_path =“D:/test/data_expand/”
filename,extension = os.path.splitext(file_path)
print(“filename:”,filename) # D:/test/data_expand/
print(“extension:”,extension) # 空文件后缀


#### h. os.path.join(path,\*path)


拼接路径



p1 = r’D:\临时\python试验\pandas’
p2 = r’merge\test.txt’
print(os.path.join(p1,p2))



![](https://img-blog.csdnimg.cn/img_convert/8c57c0f71b76f5e31b48d4530fb1e792.png)


#### i. os.path.exists(path)


判断路径是否存在



print(os.path.exists(r’D:\临时\python试验\pandas’))
print(os.path.exists(r’D:\临时\python试验\pandas\3D图.csv’))
#true true


#### j. os.path.isdir(path, /) 、os.path.isfile(path)


前者判断是否为文件夹内 后者判断是否为文件



r1 = r’D:\临时\python试验\pandas’
r2 = r’D:\临时\python试验\pandas\merge\test.txt’

print(os.path.isdir(r1))
print(os.path.isfile(r2))


#### k. os.listdir(path)


输出path路径下所有的文件及文件夹 不遍历下层


#### l. os.walk(top, topdown=True, οnerrοr=None, followlinks=False)


循环遍历top路径下所有文件 该路径下层的文件及文件夹


top:路径,顶层路径


topdown:可以理解为加快速度,不用管,默认为True


onerror:当有错误时,可以用定义的函数去输出错误


followlinks:默认为False,意义不大


该函数必须传入路径,返回3个变量值。第一个为文件夹绝对路径,第二个为子文件夹的列表,第三个为根目录下所有文件的列表。先看第一个 (i):



for (i,j,k) in os.walk(r’D:\临时\python试验\pandas’):
print(i)



![](https://img-blog.csdnimg.cn/img_convert/f141cf69b416f7c5b014da751c00d211.png)


i 得到的是该路径下所有文件夹的绝对路径



![](https://img-blog.csdnimg.cn/img_convert/c7983a88d254b220195f9007aec11853.png)


j 得到的是对应 i 路径下含有的文件夹,每个 i 的路径输出一个列表。['merge']的由来是因为 D:\临时\python试验\pandas下有个merge文件;[]的由来是因为 D:\临时\python试验\pandas\merge下没有文件夹了。



![](https://img-blog.csdnimg.cn/img_convert/27e432f0235e4ae531c463ccd4d113da.png)


k 得到的是对应 i 路径下含有的文件,每个 i 的路径输出一个列表。这里输出的两个列表的由来,和 j 一样,就不一一解释了。




#### m. os.scandir(path = none)


加快迭代速度,把需要迭代的内容放在一个迭代对象里,而不是像os.listdir()一样把结果存在列表中(放在列表占用大量内存)


可见返回的是一个可迭代对象,作用是减少内存占用,加快运行速度。除此之外,它还可以访问文件的各种属性。如获取文件/文件夹名,文件/文件夹绝对路径,是否为文件夹,是否为文件,以及属性。



根据属性,还可以提取文件的大小(单位为kb,文件夹大小为0kb)、最近访问时间、最近修改时间、window系统下的创建时间、linux系统下的创建时间等。这里以文件大小 .st\_size为例


文件大小 .st\_size


最近访问时间 .st\_atime


最近修改时间 .st\_mtime


window系统下的创建时间 .st\_ctime


linux系统下的创建时间 .st\_birthtime


for i in os.scandir(r'D:\临时\python试验\pandas'):


print(i.name,i.stat().st\_size,'kb')



使用os.scandir()方法,它可以列出指定目录下的所有文件夹和文件


#### n. os.stat(path, \*, dir\_fd=None, follow\_symlinks=True)


获得文件的属性。能获得的属性与上面一样,不再重复。



#### o. os.mkdir(path, mode=511, \*, dir\_fd=None)


创建路径,只能创建一层


#### p. os.makedirs(name, mode=511, exist\_ok=False)


创建路径,可以创建多层


#### q. os.rename(src, dst, \*, src\_dir\_fd=None, dst\_dir\_fd=None)


重命名 移动文件或文件夹


src:原文件路径


dst:重命名/移动后的文件路径


#### r. os.remove(path, \*, dir\_fd=None)


删除文件


#### s. 获取桌面的路径


os.path.expanduser("~") 获取电脑用户名及路径



user = os.path.expanduser(“~”)
desktop = os.path.join(user,‘Desktop’)
print(user)
print(desktop)



![](https://img-blog.csdnimg.cn/img_convert/c08a2b4652e1066fadcf2c517fbd304e.png)


### 4. 字符串处理


切片: s[start: end: step]每step个字符切取一个字符拼接为字符串


字符串的重复s \* n 或n \* s


#### a. strip


它的作用是去除字符串两端的空白字符(例如空格、制表符、换行符)。



line = " hello world! "
line = line.strip()
print(line) # 输出 “hello world!”


#### b. capitalize 首字母大写



s = ‘alexWUsir’
s4_1 = s.capitalize() #首字母大写
print(s4_1) #Alexwusir


#### c. upper全部大写



s = ‘alexWUsir’
s4_2 = s.upper() #全部大写
print(s4_2) #ALEXWUSIR


#### d. lower全部小写



s = ‘alexWUsir’
s4_3 = s.lower() #全部小写
print(s4_3) #alexwusir


#### e. swapcase()大小写互换



s = ‘alexWUsir’
s4_4 = s.swapcase() #大小写互换
print(s4_4) #ALEXwuSIR


#### f. center居中(用空白/其他字符填充)



#center(self, width, fillchar=None)s = ‘alexWUsir’
s5_1 = s.center(20,‘%’) #用%填充
s5_2 = s.center(15,'') #用填充
s5_3 = s.center(20) #空白填充
print(s5_1) #%%%%%alexWUsir%%%%%%
print(s5_2)
#alexWUsir
print(s5_3) # alexWUsir


#### g. find查找


s.find通过元素找索引,找到返回索引,找不到返回-1


s.index通过元素找索引,找到返回索引,找不到返回error



s = ‘alexWUsir’
s8_11 = s.find(‘W’)
s8_12 = s.index(‘W’)
s8_21 = s.find(‘WU’)
s8_22 = s.index(‘WU’)
s8_31 = s.find(‘A’)
s8_32 = s.index(‘A’)
print(s8_11,type(s8_12))
#4 <class ‘int’>

print(s8_21 ,type(s8_22))
#4 <class ‘int’>

print(s8_31 ,type(s8_32))
#报错:ValueError: substring not found----未找到子字符串


#### h. count计算字符串中某字符/字符串的个数



s = ‘alexaa wusirl’
s10 = s.count(‘a’)
print(‘此字符串中有’ + s10 + ‘个a’)
#报错:TypeError: must be str, not int

print(‘此字符串中有’ + str(s10) + ‘个a’)
#此字符串中有3个a


#### i. split 分割:用空格(默认)/固定字符分割字符串(相当于str—>list)



s = ‘hello baby’
s1 = ‘bb:aaa:g:ggg’
s11_1 = s.split()
print(s11_1) #[‘hello’, ‘baby’]
s11_2 = s1.split(‘:’)
print(s11_2) #[‘bb’, ‘aaa’, ‘g’, ‘ggg’]


#### j. format 格式化输出


格式化字符串 用大括号{}标明被替换的字符串


##### 1.按照{}的顺序依次匹配括号中的值



s = “{} is a {}”.format(‘Tom’, ‘Boy’)
print(s) # Tom is a Boy

s1 = “{} is a {}”.format(‘Tom’)

抛出异常, Replacement index 1 out of range for positional args tuple

print(s1)



##### 2.**通过索引的方式去匹配参数**



s = “{0} is a {1}”.format(‘Tom’, ‘Boy’)
print(s) # Tom is a Boy

s1 = “{1} is a {2}”.format(‘Tom’, ‘Lily’, ‘Girl’)
print(s1) # Lily is a Girl


##### 3.通过参数名来匹配参数



s = “{name} is a {sex}”.format(name=‘Tom’, sex=‘Boy’)
print(s) # Tom is a Boy


##### 4.如果参数已经确定,可以直接利用{}进行格式化引用。



name = ‘Tom’
sex = ‘Girl’

以f开头表示在字符串中支持大括号内的python表达式 此用法3.6之后支持

s = f"{name} is a {sex}"
print(s) # Tom is a Boy


#### k. replace 字符串的替换



s13_1 = ‘小明,哈喽你好,我是小明’
s13_2 = s13_1.replace(‘小明’,‘张三’)
s13_3 = s13_1.replace(‘小明’,‘张三’,1)


#### l. is系列



s14 = ‘‘print(s14.isdigit()) #是否由数字组成
print(s14.isalpha()) #是否由字母组成
print(s14.isalnum()) #是否由字母或数字组成
s14_1 = ‘zxcs’
s14_2 = ‘123546’
s14_3 = ‘c1d21c4’
print(’----------s14_1----------’)
print(s14_1.isdigit()) #False
print(s14_1.isalpha()) #True
print(s14_1.isalnum()) #True
print(‘----------s14_2----------’)
print(s14_2.isdigit()) #True
print(s14_2.isalpha()) #False
print(s14_2.isalnum()) #True
print(‘----------s14_3----------’)
print(s14_3.isdigit()) #False
print(s14_3.isalpha()) #False
print(s14_3.isalnum()) #True

判断字符串是否全部是空格
s14_4 = ’ n ’
s14_5 = ‘’
s14_6 = ’ ’
print(s14_4.isspace()) #False:有除空格外的其他字符
print(s14_5.isspace()) #False:空
print(s14_6.isspace()) #True:全是空格


#### m. for



s = ‘xiaomingnihao’
for i in s:
print(i)

#举例:

s = ‘ddddddeafsdfdsafsfff’
if ‘sf’ in s:
print(‘非法’)
print(‘------------------------’)
if ‘esffff’ not in s:
print(‘合法’)


### 5. 操作文件


#### a. with open


用来打开本地文件,会在使用完毕后自动关闭文件



with open(file=“你要打开的路径名(或保存内容的地址)”,mode=“r/w/a”,encoding=“utf-8”) as f:
data=f.read/write()
print(data)


mode


'r' —— 只读模式,**要求目标文件必须存在。**


'w' —— 只写模式,**如果目标文件已存在,将会截断目标文件并覆盖其内容**;如果目标文件不存在,则新建之。


'a' —— 追加模式,只写打开目标文件,如果目标文件已存在,写入的内容追加到源文件的结尾;如果目标文件不存在,则创建之。


'r+' —— 读写模式,**要求目标文件必须存在,此时写入,并不会截断源文件,而是替换源文件中相应位置的内容。**


'w+' —— 读写模式,**如果目标文件已存在,将会截断目标文件并覆盖其内容**;如果目标文件不存在,则新建之。


'a+' —— 追加模式,读写打开目标文件,如果目标文件已存在,写入的内容追加到源文件的结尾;如果目标文件不存在,则创建之。


上面的6中文件打开模式,还可以与'b','t'相结合,组成类似'rb'、'wt'这样的形式,'b'代表二进制模式,'t'代表文本模式。**默认情况下,Python以文本模式打开目标文件。**


file对象的属性:




|  |  |
| --- | --- |
| file.readline() | 读文件中一行内容 调用一次读一行 |
| file.readlines() | 返回一个列表,文件中的每一行都是列表中的一个数据 |
| f.closed | 只读属性,判断f.close()是否已经调用过。 |
| f.encoding | 只读属性,文件的encoding格式 |
| f.mode | 只读属性,显示调用open()打开文件时指定的mode |
| f.name | 只读属性,显示调用open()文件时的指定名称 |
| f.softspace | 只读的布尔属性,供print语句记录自己的状态,file对象自身并不修改或使用该属性。 |
| f.close() | 关闭已经打开的file对象,所有的file对象,完成读写操作后,都应该关闭 |
| f.read(size = -1) | 读取文件内容,以字符串的形式返回。 size < 0 —— 一直读到文件结尾; size > 0 —— 读取 size 字节的内容直到文件结尾,如果到了文件末尾仍未满 size 字节,则返回全文。 size = 0 —— size = 0 或读取时当前文件的位置在文末,都会返回一个空字符串。 省略时表示一次性读完整个文件 |
| f.readline(size = -1) | 读取1行,直到遇见'\n'或读满size字节,以字符串的形式返回。 size >= 0,读取的内容不超过size字节,如果没有读够 size 字节就到本行结尾,则停止读取,返回本行。 size < 0,读取当前一行的全部内容,直到遇到 '\n' 或文件结尾。 省略时表示读取当前一行的全部内容 |
| f.readlines() | 读取多行,返回一个list,每一行作为 list 中的一个字符串。最后一个字符串可能不以 “ \n ”结尾。 |
| f.next() | file对象是可迭代的,每次迭代返回文件中的一行。 |
| f.seek(pos, how = 0) | 将当前文件的位置设置到距离参考点pos字节的位置,参数 how 决定参照点的位置: how = 0,参照点是文件开头,这是默认情形,对应于 os.SEEK\_SET how = 1,参考点是当前位置,对应于os.SEEK\_CUR how = 2,参考点是文末,对应于os.SEEK\_END |
| f.write(s) | 将字符串 s 写入到文件中 |
| f.writelines(lst) | 参数lst是一个**可迭代对象**,将其中的字符串内容全部写到 f 中,该函数不会自动添加 '\n' ! |


#### b. 遍历指定类型文件


可以指定文件夹包含某个字符,可以使用 find 方法或者 \_\_contains\_\_ 方法:



# 包含 返回 True/False
path.__contains__("xxx")
# 查找 如果包含子字符串返回开始的索引值,否则返回-1
path.find("xxx") >= 0

如果只需要遍历相关的文件夹只需要在遍历 fileList 时对 path 进行限制,例如只遍历 shell,[python]( ),java文件可以这样设置:



path.endswith(‘.sh’) or path.endswith(‘.py’) or path.endswith(‘.java’)



#### c. 替换文件内容



def replaceFileByTarget(path, target, new):
with open(path, ‘r’) as f:
text = f.read().replace(target, new)
open(path, ‘w’).write(text)
print(“修改成功: {}”.format(path))

fileList = getFile(rootDir)
for i in fileList:
replaceFileByTarget(i, “hello”, “HELLO”)


#### d. 将数据写入excel


![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/30dbefa7f311a757b18ab8f5ab6e9073.jpeg)

**感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:**



① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)**
![img](https://i-blog.csdnimg.cn/blog_migrate/667696cd3544d50abefc50cf4aee9f0a.png)

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
, 'w').write(text)
    print("修改成功: {}".format(path))
 
fileList = getFile(rootDir)
for i in fileList:
    replaceFileByTarget(i, "hello", "HELLO")
d. 将数据写入excel

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-2t2kApP5-1713356858379)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值