是否可以使用 os.listdir() 打印分栏输出?
Is it possible to print columnized output with os.listdir()?
我想用 os.listdir 创建两列。代码是标准的 listdir().
for f in os.listdir(os.curdir):
print f
输出如下所示:
file1
file2
file3
file4
但我正在努力实现:
file1 file3
file2 file4
使用 os.listdir() 可以(轻松)实现吗?
不,os.listdir()
不可能。您可能需要考虑其他选项,例如 How to print a list more nicely?.
os.listdir
只是 returns 一个列表,不会像 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
移位列表,交织它们,并相应地生成格式)
您可以使用 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
试试这个,
for i,k in zip(os.listdir(os.curdir)[0::2], os.listdir(os.curdir)[1::2]): print i,k
我想用 os.listdir 创建两列。代码是标准的 listdir().
for f in os.listdir(os.curdir):
print f
输出如下所示:
file1
file2
file3
file4
但我正在努力实现:
file1 file3
file2 file4
使用 os.listdir() 可以(轻松)实现吗?
不,os.listdir()
不可能。您可能需要考虑其他选项,例如 How to print a list more nicely?.
os.listdir
只是 returns 一个列表,不会像 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
移位列表,交织它们,并相应地生成格式)
您可以使用 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
试试这个,
for i,k in zip(os.listdir(os.curdir)[0::2], os.listdir(os.curdir)[1::2]): print i,k