首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xonsh使用ls循环文件。

使用xonsh使用ls循环文件。
EN

Stack Overflow用户
提问于 2016-06-22 22:19:10
回答 2查看 1.3K关注 0票数 6

我想使用xonsh来bzip一个目录中的几个文件。我首先尝试以下几点:

代码语言:javascript
复制
$ 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

好的,所以我显式地使用$()

代码语言:javascript
复制
$ 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.

有更好的方法吗?

代码语言:javascript
复制
$ xonsh --version
('xonsh/0.3.4',)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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)

票数 9
EN

Stack Overflow用户

发布于 2017-03-11 05:43:51

使用ls

代码语言:javascript
复制
for fn in !(ls):
    print(fn.rstrip())

使用globs (可在regex、shell和path变体中找到):

代码语言:javascript
复制
for fn in g`*`:
    print(fn)

使用Python (请参阅os、glob或路径库模块):

代码语言:javascript
复制
import os
for fn in os.listdir():
    print(fn)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37979187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档