我想使用xonsh来bzip一个目录中的几个文件。我首先尝试以下几点:
$ 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',)发布于 2016-06-23 01:35:38
您非常接近第二个例子。唯一要注意的是,fn是Python变量名,因此您必须使用@()将其传递给子进程:
$ for fn in $(ls).split(): . bzip2 @(fn)
此外,在v0.3.4中,您可以使用regex globbing而不是ls,
$ for fn in `.*`: . bzip2 @(fn)
至少在主服务器上,您现在可以逐行遍历!(),这意味着,如果您与ls结合,下面的内容也会工作:
$ for fn in !(ls): . bzip2 @(fn)
发布于 2017-03-11 05:43:51
使用ls
for fn in !(ls):
print(fn.rstrip())使用globs (可在regex、shell和path变体中找到):
for fn in g`*`:
print(fn)使用Python (请参阅os、glob或路径库模块):
import os
for fn in os.listdir():
print(fn)https://stackoverflow.com/questions/37979187
复制相似问题