代码之家  ›  专栏  ›  技术社区  ›  torger

通过python按大小排列文件列表

  •  1
  • torger  · 技术社区  · 16 年前

    目录列表中的转储示例:

    hello:3.1 GB
    world:1.2 MB
    foo:956.2 KB
    

    以上列表的格式为FILE:VALUE UNIT。如何根据文件大小对上面的每一行进行排序?

    ConvertAll engine

    问题是,我对模式匹配一无所知。但我知道你可以把 dictionary

    如果有更好的方向来解决这个问题,请让我知道。


    我的名单实际上在一个文件里。从答案中获得灵感(真棒) Alex Martelli ,我编写了以下代码,从一个文件中提取、排序并写入另一个文件。

    #!/usr/bin/env python
    
    sourceFile = open("SOURCE_FILE_HERE", "r")
    allLines = sourceFile.readlines()
    sourceFile.close()
    
    print "Reading the entire file into a list."
    
    cleanLines = []
    
    for line in allLines:
        cleanLines.append(line.rstrip())
    
    mult = dict(KB=2**10, MB=2**20, GB=2**30)
    
    def getsize(aline):
      fn, size = aline.split(':', 1)
      value, unit = size.split(' ')
      multiplier = mult[unit]
      return float(value) * multiplier
    
    print "Writing sorted list to file."
    
    cleanLines.sort(key=getsize)
    
    writeLines = open("WRITE_OUT_FILE_HERE",'a')
    
    for line in cleanLines:
        writeLines.write(line+"\n")
    
    writeLines.close()
    
    1 回复  |  直到 9 年前
        1
  •  10
  •   Alex Martelli    16 年前
    thelines = ['hello:3.1 GB', 'world:1.2 MB', 'foo:956.2 KB']
    
    mult = dict(KB=2**10, MB=2**20, GB=2**30)
    
    def getsize(aline):
      fn, size = aline.split(':', 1)
      value, unit = size.split(' ')
      multiplier = mult[unit]
      return float(value) * multiplier
    
    thelines.sort(key=getsize)
    print thelines
    

    散发 ['foo:956.2 KB', 'world:1.2 MB', 'hello:3.1 GB'] ,视需要而定。您可能需要将一些条目添加到 mult