目录
一、导入库
二、 获取指定文件大小和占用空间
三、递归遍历文件
四、排序 & 封装
五、完整代码
我们需要导入os库来进行文件处理和路径管理问题,math中的ceil函数
from os import *
from math import *
如何获取文件或文件夹大小呢?
我们需要os.path中的getsize语句
如:
from os import *
f = r"C:\Users\LENOVO\Desktop\os_path"
print(path.getsize(f)) # 我这台电脑的输出-> 4546 (字节bit)
那么我们怎么将字节转成我们看得懂的85B、100MB、8GB、等等呢?
我们就来写一个将字节转大小的函数吧:
from os import *
from math import *
def size(a):
size_list = [1024 * 1024 * 1024 * 1024, 1024 * 1024 * 1024, 1024 * 1024, 1024, 0] # 1TB,1GB,1MB,1KB,0B对应的字节
symbol_list = ["TB", "GB", "MB", "KB", "B"] # 文件大小单位表
for x in range(5): # 遍历列表
if a >= size_list[x]: # 如果比特值a大于等于1TB,1GB,1MB,1KB或0B也就是单位值为symbol_list[x]详见下表
try:
return str("%.2f" % (a / size_list[x])) + symbol_list[x] # 放回"大小+单位"
# 我们发现占用空间和大小都是保留两位小数的,所以需要%.2f
except ZeroDivisionError: # 说明大小为零
return str(a) + "B" # 返回0B
f = r"C:\Users\LENOVO\Desktop\os_path.py"
print(size(path.getsize(f))) # 我这台电脑的输出-> 4.43KB
我们是怎么实现的的呢?
因为是从大到小判断是否大于1TB,1GB,1MB,1KB,于0B的。
也就是说,大于等于1TB的就用TB如100TB,不大于等于1TB但大于等于1GB的就用单位GB如10GB,不大于等于1GB但大于等于1MB的用单位MB……那为什么不大于1KB但大于等于0B是单位B呢?因为还有一个0B的大小。
那么知道了文件大小,怎么算占用空间呢?
这与是硬盘分区格式有关。
大小是文件的实际大小,而占用空间是占硬盘的实际空间,以FAT32格式为例,硬盘的基本存储单位是簇,在FAT32中一簇是4KB 。那么,也就是说即使文件只有1个字节,在硬盘上也要占到4KB的空间 如果文件是4KB零1个字节,那就要占用8KB的空间,以此类推 结论: 大小是文件的实际大小,而占用空间是占硬盘的实际空间。如图(我这里一簇是4KB,你只要创建一个文本文件看一看它属性中的占用空间就知道了)
那么如何计算呢 ?
我们只需要给path.getsize(f)÷4096向上取整×4096就是占用空间(这里4096是1簇也就是4KB的字节数)
也就是:
from os import *
from math import *
def size(a):
size_list = [1024 * 1024 * 1024 * 1024, 1024 * 1024 * 1024, 1024 * 1024, 1024, 0] # 1TB,1GB,1MB,1KB,0B对应的字节
symbol_list = ["TB", "GB", "MB", "KB", "B"] # 文件大小单位表
for x in range(5): # 遍历列表
if a >= size_list[x]: # 如果比特值a大于等于1TB,1GB,1MB,1KB或0B也就是单位值为symbol_list[x]详见下表
try:
return str("%.2f" % (a / size_list[x])) + symbol_list[x] # 放回"大小+单位"
# 我们发现占用空间和大小都是保留两位小数的,所以需要%.2f
except ZeroDivisionError: # 说明大小为零
return str(a) + "B" # 返回0B
f = r"C:\Users\LENOVO\Desktop\os_path.py"
print(size(path.getsize(f))) # 我这台电脑的输出-> 4.43KB
print(size(int(ceil(path.getsize(f) / 4096)) * 4096)) # 我这台电的输出-> 8.00KB
我们再来看看:属性后面是不是有一个括号里写着字节?
我们如何添加这个呢?
做法非常简单,代码如下:
from os import *
from math import *
def size(a):
size_list = [1024 * 1024 * 1024 * 1024, 1024 * 1024 * 1024, 1024 * 1024, 1024, 0] # 1TB,1GB,1MB,1KB,0B对应的比特值
symbol_list = ["TB", "GB", "MB", "KB", "B"] # 文件大小单位表
for x in range(5): # 遍历列表
if a >= size_list[x]: # 如果比特值a大于等于1TB,1GB,1MB,1KB或0B也就是单位值为symbol_list[x]详见下表
try:
return str("%.2f" % (a / size_list[x])) + symbol_list[x] # 放回"大小+单位"
# 我们发现占用空间和大小都是保留两位小数的,所以需要%.2f
except ZeroDivisionError: # 说明大小为零
return str(a) + "B" # 返回0B
f = r"C:\Users\LENOVO\Desktop\os_path.py"
print(size(path.getsize(f))+"(" + str(path.getsize(f)) + "字节" + ")") # 我这台电脑的输出-> 4.87KB(5037字节)
print(size(int(ceil(path.getsize(f) / 4096)) * 4096)+"(" + str(int(ceil(path.getsize(f) / 4096)) * 4096) + "字节" + ")") # 我这台电的输出-> 8.00KB(8192字节)
学会获取指定文件大小和占用空间了,现在就该到遍历文件的部分,我们这次用递归的方式遍历文件,思路很简单:写一个函数scaner_file,利用递归解决问题,遍历路径下的每一个项目,如果是文件,在listdir1列表里加入这个文件的信息,如果是一个文件夹,则递归调用自己这个函数遍历下一层。
from os import *
from math import *
def size(a):
size_list = [1024 * 1024 * 1024 * 1024, 1024 * 1024 * 1024, 1024 * 1024, 1024, 0] # 1TB,1GB,1MB,1KB,0B对应的比特值
symbol_list = ["TB", "GB", "MB", "KB", "B"] # 文件大小单位表
for x in range(5): # 遍历列表
if a >= size_list[x]: # 如果比特值a大于等于1TB,1GB,1MB,1KB或0B也就是单位值为symbol_list[x]详见下表
try:
return str("%.2f" % (a / size_list[x])) + symbol_list[x] # 放回"大小+单位"
# 我们发现占用空间和大小都是保留两位小数的,所以需要%.2f
except ZeroDivisionError: # 说明大小为零
return str(a) + "B" # 返回0B
global listdir1
listdir1 = [] # 定义全局变量listdir1
def scaner_file(url):
"""
遍历url路径下的所有文件
:param url: 类型str, 需要搜索的路径
"""
file = listdir(url)
chdir(url)
for f in file:
real_url = path.join(url, f) # 拼接字符串:路径url和文件或文件夹名称
if path.isfile(real_url): # 如果路径为文件
try:
if (not f.startswith("~")) and (not f.startswith("$")): # 如果不是临时文件
listdir1.append([real_url, size(path.getsize(f)) + "(" + str(path.getsize(f)) + "字节" + ")",
size(int(ceil(path.getsize(f) / 4096)) * 4096),
path.getsize(f)]) # 在列表中加入这个文件的信息[路径,文件大小,文件占用空间,字节数(便于以后判断)]
except FileNotFoundError: # 如果没有找到文件
pass # 不做任何操作
elif path.isdir(real_url):
# 如果是目录,则是递归调用自定义函数 scaner_file (url)多次
if (not f.startswith("~")) and (not f.startswith("$")): # 不是临时文件
scaner_file(real_url) # 递归调用自己
scaner_file(input("请输入路径:")) # 输入路径并进行递归
print(listdir1)
我们试一试:输入D:\(D盘)
C:\Users\LENOVO\AppData\Local\Programs\Python\Python39\python.exe C:/Users/LENOVO/Desktop/os_path.py
请输入路径:D:\
Traceback (most recent call last):
File "C:\Users\LENOVO\Desktop\os_path.py", line 47, in
scaner_file(input("请输入路径:")) # 输入路径并进行递归
File "C:\Users\LENOVO\Desktop\os_path.py", line 44, in scaner_file
scaner_file(real_url) # 递归调用自己
File "C:\Users\LENOVO\Desktop\os_path.py", line 29, in scaner_file
file = listdir(url)
PermissionError: [WinError 5] 拒绝访问。: 'D:\\System Volume Information'
我们发现它报错拒绝访问'D:\\System Volume Information',在C盘和D盘中,有一些文件和文件夹是拒绝访问的,例如我是Windows10,我列出了一些:
mission = ["D:\\System Volume Information", "C:\\Documents and Settings",
"C:\\Program Files\\Windows Defender Advanced Threat Protection\\Classification\\Configuration",
"C:\\Program Files\\Windows NT\\附件", "C:\\ProgramData\\Application Data", "C:\\ProgramData\\Documents",
"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\程序", "C:\\ProgramData\\Microsoft\\Windows\\SystemData",
"C:\\ProgramData\\Microsoft\\Windows Defender Advanced Threat Protection",
"C:\\ProgramData\\Microsoft\\WwanSvc\\DMProfiles", "C:\\ProgramData\\Microsoft\\WwanSvc\\Profiles",
"C:\\ProgramData\\Packages\\Microsoft.XboxGamingOverlay_8wekyb3d8bbwe\\S-1-5-21-1551970388-401600794-1189712708-1001\\SystemAppData\\Helium",
"C:\\ProgramData\\Packages\\Microsoft.YourPhone_8wekyb3d8bbwe\\S-1-5-21-1551970388-401600794-1189712708-1001\\SystemAppData\\Helium",
"C:\\ProgramData\\Templates", "C:\\ProgramData\\「开始」菜单", "C:\\ProgramData\\桌面",
"C:\\System Volume Information",
"C:\\Users\\All Users", "C:\\Users\\Default", "C:\\Users\\Default User", "C:\\Users\\LENOVO\\AppData\\Local",
"C:\\Users\\LENOVO\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\程序"
"C:\\Users\\LENOVO\\Application Data"]
我们把判断是否为非法访问内容的功能加入到程序中:
from os import *
from math import *
def size(a):
size_list = [1024 * 1024 * 1024 * 1024, 1024 * 1024 * 1024, 1024 * 1024, 1024, 0] # 1TB,1GB,1MB,1KB,0B对应的比特值
symbol_list = ["TB", "GB", "MB", "KB", "B"] # 文件大小单位表
for x in range(5): # 遍历列表
if a >= size_list[x]: # 如果比特值a大于等于1TB,1GB,1MB,1KB或0B也就是单位值为symbol_list[x]详见下表
try:
return str("%.2f" % (a / size_list[x])) + symbol_list[x] # 放回"大小+单位"
# 我们发现占用空间和大小都是保留两位小数的,所以需要%.2f
except ZeroDivisionError: # 说明大小为零
return str(a) + "B" # 返回0B
global listdir1
global mission
listdir1 = [] # 定义全局变量listdir1
mission = ["D:\\System Volume Information", "C:\\Documents and Settings",
"C:\\Program Files\\Windows Defender Advanced Threat Protection\\Classification\\Configuration",
"C:\\Program Files\\Windows NT\\附件", "C:\\ProgramData\\Application Data", "C:\\ProgramData\\Documents",
"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\程序", "C:\\ProgramData\\Microsoft\\Windows\\SystemData",
"C:\\ProgramData\\Microsoft\\Windows Defender Advanced Threat Protection",
"C:\\ProgramData\\Microsoft\\WwanSvc\\DMProfiles", "C:\\ProgramData\\Microsoft\\WwanSvc\\Profiles",
"C:\\ProgramData\\Packages\\Microsoft.XboxGamingOverlay_8wekyb3d8bbwe\\S-1-5-21-1551970388-401600794-1189712708-1001\\SystemAppData\\Helium",
"C:\\ProgramData\\Packages\\Microsoft.YourPhone_8wekyb3d8bbwe\\S-1-5-21-1551970388-401600794-1189712708-1001\\SystemAppData\\Helium",
"C:\\ProgramData\\Templates", "C:\\ProgramData\\「开始」菜单", "C:\\ProgramData\\桌面",
"C:\\System Volume Information",
"C:\\Users\\All Users", "C:\\Users\\Default", "C:\\Users\\Default User", "C:\\Users\\LENOVO\\AppData\\Local",
"C:\\Users\\LENOVO\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\程序"
"C:\\Users\\LENOVO\\Application Data"] # 部分非法访问内容
def scaner_file(url):
"""
遍历url路径下的所有文件
:param url: 类型str, 需要搜索的路径
"""
if url in mission:
return 0
else:
file = listdir(url)
chdir(url)
for f in file:
real_url = path.join(url, f) # 拼接字符串:路径url和文件或文件夹名称
if path.isfile(real_url): # 如果路径为文件
try:
if (not f.startswith("~")) and (not f.startswith("$")): # 如果不是临时文件
listdir1.append([real_url, size(path.getsize(f)) + "(" + str(path.getsize(f)) + "字节" + ")",
size(int(ceil(path.getsize(f) / 4096)) * 4096),
path.getsize(f)]) # 在列表中加入这个文件的信息[路径,文件大小,文件占用空间,字节数(便于以后判断)]
except FileNotFoundError: # 如果没有找到文件
pass # 不做任何操作
elif path.isdir(real_url):
# 如果是目录,则是递归调用自定义函数 scaner_file (url)多次
if (not f.startswith("~")) and (not f.startswith("$")): # 不是临时文件
scaner_file(real_url) # 递归调用自己
scaner_file(input("请输入路径:")) # 输入路径并进行递归
print(listdir1)
输出结果:
想在就是排序的内容了,我们用sort函数给列表中的文件从小到大排序:
from os import *
from math import *
def size(a):
size_list = [1024 * 1024 * 1024 * 1024, 1024 * 1024 * 1024, 1024 * 1024, 1024, 0] # 1TB,1GB,1MB,1KB,0B对应的比特值
symbol_list = ["TB", "GB", "MB", "KB", "B"] # 文件大小单位表
for x in range(5): # 遍历列表
if a >= size_list[x]: # 如果比特值a大于等于1TB,1GB,1MB,1KB或0B也就是单位值为symbol_list[x]详见下表
try:
return str("%.2f" % (a / size_list[x])) + symbol_list[x] # 放回"大小+单位"
# 我们发现占用空间和大小都是保留两位小数的,所以需要%.2f
except ZeroDivisionError: # 说明大小为零
return str(a) + "B" # 返回0B
global listdir1
global mission
listdir1 = [] # 定义全局变量listdir1
mission = ["D:\\System Volume Information", "C:\\Documents and Settings",
"C:\\Program Files\\Windows Defender Advanced Threat Protection\\Classification\\Configuration",
"C:\\Program Files\\Windows NT\\附件", "C:\\ProgramData\\Application Data", "C:\\ProgramData\\Documents",
"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\程序", "C:\\ProgramData\\Microsoft\\Windows\\SystemData",
"C:\\ProgramData\\Microsoft\\Windows Defender Advanced Threat Protection",
"C:\\ProgramData\\Microsoft\\WwanSvc\\DMProfiles", "C:\\ProgramData\\Microsoft\\WwanSvc\\Profiles",
"C:\\ProgramData\\Packages\\Microsoft.XboxGamingOverlay_8wekyb3d8bbwe\\S-1-5-21-1551970388-401600794-1189712708-1001\\SystemAppData\\Helium",
"C:\\ProgramData\\Packages\\Microsoft.YourPhone_8wekyb3d8bbwe\\S-1-5-21-1551970388-401600794-1189712708-1001\\SystemAppData\\Helium",
"C:\\ProgramData\\Templates", "C:\\ProgramData\\「开始」菜单", "C:\\ProgramData\\桌面",
"C:\\System Volume Information",
"C:\\Users\\All Users", "C:\\Users\\Default", "C:\\Users\\Default User", "C:\\Users\\LENOVO\\AppData\\Local",
"C:\\Users\\LENOVO\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\程序"
"C:\\Users\\LENOVO\\Application Data"] # 部分非法访问内容
def scaner_file(url):
"""
遍历url路径下的所有文件
:param url: 类型str, 需要搜索的路径
"""
if url in mission:
return 0
else:
file = listdir(url)
chdir(url)
for f in file:
real_url = path.join(url, f) # 拼接字符串:路径url和文件或文件夹名称
if path.isfile(real_url): # 如果路径为文件
try:
if (not f.startswith("~")) and (not f.startswith("$")): # 如果不是临时文件
listdir1.append([real_url, size(path.getsize(f)) + "(" + str(path.getsize(f)) + "字节" + ")",
size(int(ceil(path.getsize(f) / 4096)) * 4096),
path.getsize(f)]) # 在列表中加入这个文件的信息[路径,文件大小,文件占用空间,字节数(便于以后判断)]
except FileNotFoundError: # 如果没有找到文件
pass # 不做任何操作
elif path.isdir(real_url):
# 如果是目录,则是递归调用自定义函数 scaner_file (url)多次
if (not f.startswith("~")) and (not f.startswith("$")): # 不是临时文件
scaner_file(real_url) # 递归调用自己
scaner_file(input("请输入路径:")) # 输入路径并进行递归
listdir1.sort(key=lambda obj: obj[3]) # 给listdir1排序,使用列表中的第4项,也就是字节数作为key
for item in listdir1: # 遍历列表
print("-" * 50) # 绘制分隔符
for it in item: # 遍历对象中的每一个元素
print(it) # 输出
输出:(截取了一段)
D:\MixlyV1.4.4\MixlyforWindows\Microduino-IDE\hardware\tools\avr\lib\gcc\avr\4.9.2\include\stdfix.h
6.77KB(6929字节)
8.00KB
6929
--------------------------------------------------
D:\MixlyV1.4.4\MixlyforWindows\Microduino-IDE\hardware\tools\avr\avr\lib\avr51\libscanf_flt.a
6.77KB(6936字节)
8.00KB
6936
--------------------------------------------------
D:\MixlyV1.4.4\MixlyforWindows\Microduino-IDE\libraries\ArduinoJson\test\Misc\std_string.cpp
6.78KB(6944字节)
8.00KB
6944
--------------------------------------------------
D:\AppInventor2019ServerEdition_Win\resources\appinventor\DevServer\WEB-INF\lib\appengine-jsr107cache-1.9.46.jar
6.79KB(6953字节)
8.00KB
6953
--------------------------------------------------
D:\AppInventor2019ServerEdition_Win\resources\appinventor\AppEngine\demos\guestbook\war\WEB-INF\lib\appengine-jsr107cache.jar
6.79KB(6954字节)
8.00KB
6954
--------------------------------------------------
D:\AppInventor2019ServerEdition_Win\resources\appinventor\AppEngine\lib\opt\user\jsr107\v1\appengine-jsr107cache-1.9.48.jar
6.79KB(6954字节)
8.00KB
6954
--------------------------------------------------
D:\AppInventor2019ServerEdition_Win\resources\appinventor\AppEngine\lib\user\appengine-jsr107cache-1.9.48.jar
6.79KB(6954字节)
8.00KB
6954
--------------------------------------------------
D:\AppInventor2019ServerEdition_Win\resources\appinventor\DevServer\closure-library\closure\goog\events\imehandler_test.js
6.79KB(6954字节)
8.00KB
6954
--------------------------------------------------
D:\AppInventor2019ServerEdition_Win\resources\appinventor\DevServer\closure-library\closure\goog\vec\vec4d_test.js
6.79KB(6954字节)
8.00KB
6954
--------------------------------------------------
D:\AppInventor2019ServerEdition_Win\resources\appinventor\DevServer\closure-library\closure\goog\vec\vec4f_test.js
6.79KB(6954字节)
8.00KB
6954
--------------------------------------------------
D:\AppInventor2019ServerEdition_Win\resources\appinventor\DevServer\closure-library\closure\goog\locale\genericfontnamesdata.js
6.79KB(6955字节)
8.00KB
6955
--------------------------------------------------
D:\MixlyV1.4.4\MixlyforWindows\Microduino-IDE\hardware\arduino\avr\firmwares\atmegaxxu2\arduino-usbserial\Lib\LightweightRingBuff.h
6.79KB(6955字节)
8.00KB
6955
--------------------------------------------------
D:\AppInventor2019ServerEdition_Win\resources\appinventor\AppEngine\docs\javadoc\com\google\appengine\api\prospectivesearch\package-tree.html
6.79KB(6956字节)
8.00KB
6956
--------------------------------------------------
D:\AppInventor2019ServerEdition_Win\resources\appinventor\DevServer\closure-library\doc\css\article.css
6.80KB(6961字节)
8.00KB
6961
--------------------------------------------------
D:\AppInventor2019ServerEdition_Win\resources\appinventor\DevServer\closure-library\closure\goog\crypt\basen_test.js
6.80KB(6965字节)
8.00KB
6965
--------------------------------------------------
D:\MixlyV1.4.4\MixlyforWindows\Microduino-IDE\hardware\tools\avr\avr\lib\avrxmega5\libscanf_flt.a
6.82KB(6980字节)
8.00KB
6980
--------------------------------------------------
D:\AppInventor2019ServerEdition_Win\resources\appinventor\DevServer\reference\blocks\images\math\number.png
6.82KB(6986字节)
8.00KB
6986
---------------------------------------
封装:
if __name__ == "__main__":
scaner_file(input("请输入路径:")) # 输入路径并进行递归
listdir1.sort(key=lambda obj: obj[3]) # 给listdir1排序,使用列表中的第4项,也就是字节数作为key
for item in listdir1: # 遍历列表
print("-" * 50) # 绘制分隔符
for it in item: # 遍历对象中的每一个元素
print(it) # 输出
# -- coding: utf-8 --
from os import *
from math import *
def size(a):
size_list = [1024 * 1024 * 1024 * 1024, 1024 * 1024 * 1024, 1024 * 1024, 1024, 0] # 1TB,1GB,1MB,1KB,0B对应的比特值
symbol_list = ["TB", "GB", "MB", "KB", "B"] # 文件大小单位表
for x in range(5): # 遍历列表
if a >= size_list[x]: # 如果比特值a大于等于1TB,1GB,1MB,1KB或0B也就是单位值为symbol_list[x]详见下表
try:
return str("%.2f" % (a / size_list[x])) + symbol_list[x] # 放回"大小+单位"
# 我们发现占用空间和大小都是保留两位小数的,所以需要%.2f
except ZeroDivisionError: # 说明大小为零
return str(a) + "B" # 返回0B
global listdir1
global mission
listdir1 = [] # 定义全局变量listdir1
mission = ["D:\\System Volume Information", "C:\\Documents and Settings",
"C:\\Program Files\\Windows Defender Advanced Threat Protection\\Classification\\Configuration",
"C:\\Program Files\\Windows NT\\附件", "C:\\ProgramData\\Application Data", "C:\\ProgramData\\Documents",
"C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\程序", "C:\\ProgramData\\Microsoft\\Windows\\SystemData",
"C:\\ProgramData\\Microsoft\\Windows Defender Advanced Threat Protection",
"C:\\ProgramData\\Microsoft\\WwanSvc\\DMProfiles", "C:\\ProgramData\\Microsoft\\WwanSvc\\Profiles",
"C:\\ProgramData\\Packages\\Microsoft.XboxGamingOverlay_8wekyb3d8bbwe\\S-1-5-21-1551970388-401600794-1189712708-1001\\SystemAppData\\Helium",
"C:\\ProgramData\\Packages\\Microsoft.YourPhone_8wekyb3d8bbwe\\S-1-5-21-1551970388-401600794-1189712708-1001\\SystemAppData\\Helium",
"C:\\ProgramData\\Templates", "C:\\ProgramData\\「开始」菜单", "C:\\ProgramData\\桌面",
"C:\\System Volume Information",
"C:\\Users\\All Users", "C:\\Users\\Default", "C:\\Users\\Default User", "C:\\Users\\LENOVO\\AppData\\Local",
"C:\\Users\\LENOVO\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\程序"
"C:\\Users\\LENOVO\\Application Data"] # 部分非法访问内容
def scaner_file(url):
"""
遍历url路径下的所有文件
:param url: 类型str, 需要搜索的路径
"""
if url in mission:
return 0
else:
file = listdir(url)
chdir(url)
for f in file:
real_url = path.join(url, f) # 拼接字符串:路径url和文件或文件夹名称
if path.isfile(real_url): # 如果路径为文件
try:
if (not f.startswith("~")) and (not f.startswith("$")): # 如果不是临时文件
listdir1.append([real_url, size(path.getsize(f)) + "(" + str(path.getsize(f)) + "字节" + ")",
size(int(ceil(path.getsize(f) / 4096)) * 4096),
path.getsize(f)]) # 在列表中加入这个文件的信息[路径,文件大小,文件占用空间,字节数(便于以后判断)]
except FileNotFoundError: # 如果没有找到文件
pass # 不做任何操作
elif path.isdir(real_url):
# 如果是目录,则是递归调用自定义函数 scaner_file (url)多次
if (not f.startswith("~")) and (not f.startswith("$")): # 不是临时文件
scaner_file(real_url) # 递归调用自己
if __name__ == "__main__":
scaner_file(input("请输入路径:")) # 输入路径并进行递归
listdir1.sort(key=lambda obj: obj[3]) # 给listdir1排序,使用列表中的第4项,也就是字节数作为key
for item in listdir1: # 遍历列表
print("-" * 50) # 绘制分隔符
for it in item: # 遍历对象中的每一个元素
print(it) # 输出
谢谢大家浏览,人家写文章不容易,点个赞吧!
————————————————
版权声明:本文参考CSDN博主「苦荞米」的原创文章,遵循CC 4.0 BY-SA版权协议,转载附上原文出处链接及本声明。
原文链接:C# 获取文件占用空间 (绝对准确)_苦荞米的博客-CSDN博客_c# 获取文件大小