处理大输出-Python
我正在使用python处理大输出-Python,python,amazon-s3,boto,Python,Amazon S3,Boto,我正在使用pythonboto库访问S3存储桶中的文件。我已经整理好了所有的输出,效果很好。但是我不想同时显示终端上的所有文件。比如说,如果一个人的存储桶中有800个文件和300个文件夹,那么一次显示所有这些文件将是一个混乱,因为滚动浏览所有文件是不可行的。显示如此大的输出量的最佳方式是什么?我想把它们分成几页,但在思考过程中有点自以为是。如有任何帮助/想法,将不胜感激 我如何迭代列表 for each in file_list: print ("{0} ,{1},{2},{3}".fo
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内部使用
子流程
),以在输出上获得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')
def showlonglist(longlist,atatime=20):
i=0
而我
还有许多更精细的方法(例如使用
iter
,然后使用itertools
),但这种简单的方法适用于缺少shell命令(例如less
)的基本情况,因此将它们显示为页面有什么问题?不确定如何执行。我曾想过把所有的唱片都列在一张单子上。但是从那里开始,如何显示每页10个(只是一个例子)文件,我使用的是Mac
,所以我已经安装了较少的命令。然后你应该接受@Boaz的答案(或者至少让他使用less
,实际提供一个showlonglist
函数的完整工作示例,这非常简单,并且需要完整的答案:-)。好主意,如果您添加一个完整的工作示例(例如作为showlonglist
函数)我希望OP能接受当时的完整答案。@Boaz我从未使用过子流程
。你能给我一个输出示例吗?