是否可以使用os.listdir()打印列化输出?

时间:2017-05-25 12:36:19

标签: python python-2.7 listdir

我想用os.listdir创建两个列。代码是标准的listdir()。

@Size(max = ?)

输出如下所示:

for f in os.listdir(os.curdir):
                print f

但我正在努力实现:

file1
file2
file3
file4

使用os.listdir()可以轻松实现吗?

4 个答案:

答案 0 :(得分:2)

os.listdir只返回一个列表,并不像ls -C2那样打印得很好(请注意,如果你有ls,你就不需要python在你的系统中)

你可以这样做2个柱子:

import os,itertools

dl=os.listdir(".")

for t in itertools.zip_longest(dl[::2],dl[1::2],fillvalue=""):
    print("{:<20} {:<20}".format(*t))

将值交错(使用zip_longest以避免遗忘奇数)并使用20个空格格式化每个值。

任意数量的列的一般情况可能是:

import os,itertools

dl=os.listdir(".")

ncols = 3

for t in itertools.zip_longest(*(dl[i::ncols] for i in range(ncols)),fillvalue=""):
    print(("{:<20}"*ncols).format(*t))

(生成ncols个移位列表,交错它们,并相应地生成格式)

答案 1 :(得分:0)

不,os.listdir()无法实现。您可能需要考虑其他选项,例如How to print a list more nicely?

答案 2 :(得分:0)

您可以使用此anwser

中的功能pairwise轻松完成
def pairwise(iterable):
    a = iter(iterable)
    return izip(a, a)

for f1, f2 in pairwise(os.listdir(os.curdir)):
    print f1 + '\t' + f2

答案 3 :(得分:0)

试试这个,

for i,k in zip(os.listdir(os.curdir)[0::2], os.listdir(os.curdir)[1::2]): print i,k