处理大输出 - Python

时间:2015-02-14 21:30:32

标签: python amazon-s3 boto

我正在使用python boto库来访问S3存储桶中的文件。我把所有的输出整理出来并且工作正常。但我不想立刻显示终端上的所有文件。假设一个人在他们的桶中有800个文件和300个文件夹,一次显示所有文件将是一团糟,因为滚动所有文件是不可行的。什么是显示如此大输出的最佳方式?我正在考虑将它们划分为页面,但稍微坚持一下这个过程。任何帮助/想法将不胜感激

我如何遍历列表

for each in file_list:
    print ("{0} ,{1},{2},{3}".format(each.name,each.size,each.version)

编辑:

我将文件附加到列表中并使用for循环将其打印出来以迭代它们并使用.format打印它们。示例如下所示:

Files
file1
file2
file3
file4
file5
file6
file7
file8
file9
file10
file11
file12
file13
file14
file15
file16

Folders:

folder1
folder2
folder3
folder4
folder5
folder6
folder7
folder8

2 个答案:

答案 0 :(得分:1)

您可以将输出传递给less(使用subprocess在python中)以在输出上获得less命令效果。

示例代码:

import subprocess

long_array = []
for i in xrange(1000):
    line = 'Line text number {0}'.format(i)
    long_array.append(line)
output_string = '\n'.join(long_array)  # can be anything you want as long as it is a string

proc = subprocess.Popen('less', stdin=subprocess.PIPE)
proc.communicate(output_string)

答案 1 :(得分:0)

如果您已经或可以安装less命令(或更老但也可行more)@ Boaz使用它的想法无疑是最好的 - 所以你可能在任何Unix上都可以类似系统。

但是,如果你需要或想要更自发地做到这一点:

def showlonglist(longlist, atatime=20):
    i = 0
    while i < len(longlist):
        for j in range(i, min(len(longlist)-1, i+atatime)):
            print(longlist[j])
        i += atatime
        print('Press Return to continue')

还有许多更精确的方法(例如使用iter然后使用itertools),但这种简单的方法适用于缺少shell命令(例如less)的基本情况