一直输出python干货,是我开这个公众号的初衷,我会把这条道路坚持走到底,也希望我写的东西对你有一点作用。我把自己每天学习python时遇到的各种问题记录下来,分享给大家,避免入门的小伙们入门走弯路。
1. from __future__ import division
导入未来的支持语言特征中division(精确除法),当我们在程序中没有导入该特征时,“/”操作符执行的只能是整除,也就是取整数,只有当我们导入division(精确算法)以后,“/”执行的才是精确算法。
那么,上面这段话是什么意思呢?我们用一个例子来解释一下。
Python里的除号默认是整除
3/2
1
那么,加上了上面那一段后,除号就变成了正常的小数除法了
from __future__ import division
print(3/2)
1.5
2.文件处理入门
如何统计某一路径下文件夹和文件?比如,我的电脑上安装的是python3.7,那么搜索整个py3.7下面的所有目录(包括子目录),里面的所有的文件。
根据题目要求,先把目录下的全部文件和目录列出,若是子目录,就继续寻找该目录下的子文件,然后不断重复刚才的过程,因为我们不知道有多少层嵌套的子目录,最好用递归。
大家先看一下我写的代码。
#列出目录下所有的文件和子目录内的文件def listFiles(path='.'): #传入路径,默认值为当前目录
if not os.path.exists(path): #判断是否有效目录
print('path error')
return None
file=' '
try:
for file in os.listdir(path): #列出目录下所有文件和目录
filepath=os.path.join(path,file) #构造全路径文件
if os.path.isdir(filepath): #判断是否为目录
print(filepath) #打印目录
listFiles(path=filepath) #继续递归子目录
elif os.path.isfile(filepath): #判断是否为文件
print(filepath)
getFileSize(filepath) #获得文件大小
except TypeError: #若出错,打印出错的文件
print(file)
第二中解法有点骚,大家也看看:
import os
DIR
= 'D:/Program Files/python37' #要统计的文件夹print('dirnum:',len([name for name in os.listdir(DIR) if os.path.isdir(os.path.join(DIR,name))]))
print('filenum:',len([name for name in os.listdir(DIR) if os.path.isfile(os.path.join(DIR,name))]))
#打开文件path = 'D:/Program Files/python37'
dirs = os.listdir(path)
#输出所有文件和文件夹for file in dirs:
print(file)
Python中对文件系统的访问大多是通过os模块实现的,我们需要熟练掌握,通过编写上面的代码,总结一下常见的用法和技巧。
(1)文件路径的处理
假设有一个文件路径
path='/users/Python/Data/info.txt'
1)获得路径
printos.path.dirname(path)
>>/users/Python/Data
2)分割文件名
printos.path.basename(path)
>>info.txt
3)分割文件的后缀
printos.path.split(path)
>>('/users/Python/Data','info.txt')
(2)判断是否为文件或者目录
在文件处理的时候,特别是递归处理目录下的多个文件或者嵌套子目录的时候,要先判断一下这个是文件还是目录。
举例说明,假设我们有一个这样的目录结构:
|---test01--------
|---test02--------
|---demo_file.py—
判断是否为文件
printos.path.isfile('test01')
>>False
printos.path.isfile('demo_file.py')
>>True
判断是否为目录
printos.path.isdir('test01')
>>True
判断文件或者目录是否存在
printos.path.exists('demo_file.py')
>>True
printos.path.exists('test01')
>>True
细心的小伙伴们还注意到上面例子的代码中还涉及异常处理,这部分的内容我放到下次再详细介绍,现在我们刚刚入门,不要贪多,应该稳扎稳打。
网友评论