【问题标题】:Handle large output - Python [closed]处理大输出 - Python [关闭]
【发布时间】:2015-04-15 17:32:42
【问题描述】:

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

【问题讨论】:

  • 那么将它们显示为页面有什么问题?
  • 不知道该怎么做。我已经将所有记录放入列表中。但从那里开始,如何在每页显示 10 个(只是一个示例)文件

标签: python amazon-s3 boto


【解决方案1】:

您可以将输出通过管道传输到 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)

【讨论】:

  • 好主意,如果您添加一个完整的工作示例(例如作为showlonglist 函数),我希望 OP 可以接受当时完整的答案。
  • @Boaz 我从未使用过subprocess。你能给我一个输出的例子吗?
【解决方案2】:

如果您拥有或可以安装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),但这种简单的方法适用于缺少诸如less 等shell 命令的初级情况。

【讨论】:

  • 我使用的是Mac,所以我已经安装了less命令。
  • 那么您应该接受@Boaz 的回答(或者至少让他使用less 实际提供showlonglist 函数的完整工作示例,这很容易,并且需要回答完成:-)。
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多