使用xonsh使用ls循环文件

时间:2016-06-22 22:19:10

标签: xonsh

我想使用xonsh来压缩目录中的几个文件。我首先尝试以下内容:

$ ls
table_aa.csv    table_amgn.csv  table_csco.csv  table_esrx.csv  table_hal.csv  table_jbl.csv  table_pcg.csv   table_zmh.csv
table_aapl.csv  table_amzn.csv  table_d.csv     table_gas.csv   table_hp.csv   table_jpm.csv  table_usb.csv
$ for fn in ls:
..    bzip2 fn
..
NameError: name 'ls' is not defined

好的,我明确地使用$()

$ for fn in $(ls).split():
.     bzip2 fn
bzip2: Can't open input file fn: No such file or directory.
bzip2: Can't open input file fn: No such file or directory.

有更好的方法吗?

$ xonsh --version
('xonsh/0.3.4',)

2 个答案:

答案 0 :(得分:6)

你非常接近第二个例子。唯一需要注意的是fn是一个Python变量名,所以你必须使用@()将它传递给子进程:

$ for fn in $(ls).split(): . bzip2 @(fn)

此外,在v0.3.4上,您可以使用regex globbing而不是ls,

$ for fn in `.*`: . bzip2 @(fn)

至少在master上,你现在可以逐行遍历!(),这意味着如果你坚持使用ls,下面的内容也会有效:

$ for fn in !(ls): . bzip2 @(fn)

答案 1 :(得分:1)

使用ls

for fn in !(ls):
    print(fn.rstrip())

使用globs(可在正则表达式,shell和路径中使用):

for fn in g`*`:
    print(fn)

使用Python API(请参阅os,glob或pathlib模块):

import os
for fn in os.listdir():
    print(fn)