0

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

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

输出如下所示:

file1
file2
file3
file4

但我正在努力实现:

file1    file3
file2    file4

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

4

4 回答 4

2

os.listdir只是返回一个列表,不会像以前那样很好地打印它ls -C2(请注意,如果您的系统中有此功能,则不需要 python ls

你可以这样做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移位列表,交织它们,并相应地生成格式)

于 2017-05-25T12:43:27.167 回答
0

不,这是不可能的os.listdir()。您可能需要考虑其他选项,例如如何更好地打印列表?.

于 2017-05-25T12:41:39.977 回答
0

您可以使用pairwiseanwser中的功能轻松完成

def pairwise(iterable):
    a = iter(iterable)
    return izip(a, a)

for f1, f2 in pairwise(os.listdir(os.curdir)):
    print f1 + '\t' + f2
于 2017-05-25T12:49:55.847 回答
0

试试这个,

for i,k in zip(os.listdir(os.curdir)[0::2], os.listdir(os.curdir)[1::2]): print i,k
于 2017-05-25T12:52:05.303 回答