我想使用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',)
答案 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)