处理大输出 - Python

Handle large output - Python

我正在使用 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

您可以将输出通过管道传输到 less(在 python 中使用 subprocess)以获得对输出的 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)

如果你有或可以安装 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.