为什么os.path.getsize()在python中抛出错误?

时间:2015-11-22 05:49:04

标签: python os.path

我正在尝试打印所有文件列表的大小,但它会抛出错误。 这是代码:

import os

def printSize(fileAbsPath) :
  print os.path.getsize(fileAbsPath)


for folderName, subfolders, filenames in os.walk('/Users/kris/Desktop'):
  for filename in filenames :
    try :
      printSize(os.path.abspath(filename))
    except Exception as err:
      print 'An exception happend : ' + str(err)

而且,错误是:

An exception happend : [Errno 2] No such file or directory: '/Users/kris/Desktop/AutomateBoringStuff/.DS_Store'
An exception happend : [Errno 2] No such file or directory: '/Users/kris/Desktop/AutomateBoringStuff/.gitignore'
An exception happend : [Errno 2] No such file or directory: '/Users/kris/Desktop/AutomateBoringStuff/.gitmodules'
An exception happend : [Errno 2] No such file or directory: '/Users/kris/Desktop/AutomateBoringStuff/.localized'
.
.
.
.
An exception happend : [Errno 2] No such file or directory: '/Users/kris/Desktop/AutomateBoringStuff/BLE Scanner.m4a'
An exception happend : [Errno 2] No such file or directory: '/Users/kris/Desktop/AutomateBoringStuff/Screen Shot 2015-07-23 at 3.30.52 PM.png'

我不知道它有什么问题。我认为它与“隐藏文件”有点相关,但事实并非如此。

3 个答案:

答案 0 :(得分:1)

试试这个:

  printSize(os.path.abspath(os.path.join(folderName, filename)))

答案 1 :(得分:0)

来自os.walk的文件(强调补充):

  

通过从上到下或从下到上走树来生成目录树中的文件名。对于以目录top(包括top本身)为根的树中的每个目录,它会产生一个3元组(dirpath,dirnames,filenames)。   dirpath是一个字符串,即目录的路径。 dirnames是dirpath中子目录的名称列表(不包括'。'和' ..')。 filenames是dirpath中非目录文件的名称列表。请注意,列表中的名称不包含路径组件。 要获取dirpath中文件或目录的完整路径(以top开头),请执行os.path.join(dirpath,name)。

我猜你在AutomateBoringStuff中运行了你的脚本(所以它是工作目录),但文件实际上在Desktop

/Users/kris/Desktop/AutomateBoringStuff/BLE Scanner.m4a应为/Users/kris/Desktop/BLE Scanner.m4a

答案 2 :(得分:0)

根据docs.python os.path.getsize(路径) 返回路径的大小(以字节为单位)。

  

如果文件不存在或无法访问,则提高os.error

因此,请抓住此异常或确保该文件存在。