无法将文件大小从 Python 中的列表框输出到标签 3

Trouble outputing file size to a label from a listbox in Python 3

我正在使用 os.path.getsize() 将文件的大小输出到标签。文件路径存储在列表框中。该函数有效,但它以位为单位输出文件大小,因此我编写了以下内容以转换为更合适的单位,现在它仅以 TB 为单位显示。它正在执行所有 if 语句,无论条件是否为真。

activeFile = FilesList.get(ACTIVE)
fileSize = os.path.getsize(activeFile)
fileSizeStr = str(fileSize) + ' Bits'

if fileSize > 8:
    fileSize = fileSize / 8
    fileSizeStr = str(fileSize) + ' Bytes'

if fileSize < 1024:
    fileSize = fileSize / 1024
    fileSizeStr = str(fileSize) + ' KB'

if fileSize < 1024:
    fileSize = fileSize / 1024
    fileSizeStr = str(fileSize) + ' MB'

if fileSize < 1024:
    fileSize = fileSize / 1024
    fileSizeStr = str (fileSize) + ' GB'

if fileSize < 1024:
    fileSize = fileSize / 1024
    fileSizeStr = str(fileSize) + ' TB'

你的代码中有几个问题,

  • 您总是重新分配 fileSizeStr。您需要连接新值。
  • 您需要检查 fileSize 是否大于或等于 1024,而不是更小。
  • 新的fileSize应该是第一次计算的余数,而不是它的结果。

此外,恕我直言,从较大的检查会更好。

#constants
TB = 2**43
GB = 2**33
MB = 2**23
KB = 2**13
BYTES = 2**3

#some test value here
fileSize = 8

#empty string to be filled and shown later
fileSizeStr = ""

#calculations
if fileSize >= TB:
    fileTB = fileSize / TB
    fileSize = fileSize % TB
    fileSizeStr += str(fileTB) + 'TB '

if fileSize >= GB:
    fileGB = fileSize / GB
    fileSize = fileSize % GB
    fileSizeStr += str(fileGB) + 'GB '

if fileSize >= MB:
    fileMB = fileSize / MB
    fileSize = fileSize % MB
    fileSizeStr += str(fileMB) + 'MB '

if fileSize >= KB:
    fileKB = fileSize / KB
    fileSize = fileSize % KB
    fileSizeStr += str(fileKB) + 'KB '

if fileSize >= BYTES:
    fileB = fileSize / BYTES
    fileSize = fileSize % BYTES
    fileSizeStr += str(fileB) + 'Byte(s) '

fileSizeStr += str(fileSize) + 'Bit(s)'

print fileSizeStr