在D火卫一中是否有一个等价物?
在python中,我可以使用glob来搜索路径模式。例如:在D火卫一中是否有一个等价物?,d,glob,phobos,D,Glob,Phobos,在python中,我可以使用glob来搜索路径模式。例如: 导入全局 对于glob.glob(“/usr/*/python*”)中的条目: 打印(条目) 将打印以下内容: /usr/share/python3 /usr/share/python3-plainbox /usr/share/python /usr/share/python-apt /usr/include/python3.5m /usr/bin/python3 /usr/bin/python3m /usr/bin/python2.
导入全局
对于glob.glob(“/usr/*/python*”)中的条目:
打印(条目)
将打印以下内容:
/usr/share/python3
/usr/share/python3-plainbox
/usr/share/python
/usr/share/python-apt
/usr/include/python3.5m
/usr/bin/python3
/usr/bin/python3m
/usr/bin/python2.7
/usr/bin/python
/usr/bin/python3.5
/usr/bin/python3.5m
/usr/bin/python2
/usr/lib/python3
/usr/lib/python2.7
/usr/lib/python3.5
我将如何在D中创建glob或使glob等效
----于2017年9月12日更新---
我写了一个小的D模块来做globin D:也许你正在寻找
以下是文档中的示例:
//迭代当前目录中的所有D源文件及其所有
//子目录
auto-dFiles=dirEntries(“,“*.{d,di}”,SpanMode.depth);
foreach(d;d文件)
书面(d.姓名);
如果您只在Posix系统上工作,可以直接调用glob.h
。下面是一个简单的示例,它显示了与Posix API接口是多么容易:
void main()
{
进口std.stdio;
导入glob:glob;
foreach(条目;glob(“/usr/*/python*”)
书面记录(条目);
}
例如,您可以使用rdmd main.d
(rdmd执行简单的依赖关系管理)或dmd main.d glob.d
编译此文件,它会产生与您在我的机器上的输出类似的输出
glob.d
由一个方便的d型包装器(第一个函数)生成并增强。请注意,这并不完美,更好的方法是公开一个范围API,而不是分配整个阵列
<代码> /* Copyright(C)1991~2016自由软件基金会。
此文件是GNUC库的一部分。
GNUC库是自由软件;您可以重新分发它和/或
根据GNU小公众的条款对其进行修改
自由软件基金会发布的许可证;任何一个
许可证的2.1版,或(由您选择)任何更高版本。
分发GNU C库是希望它会有用,
但无任何保证;甚至没有任何关于
适销性或适合某一特定目的。见GNU
有关更多详细信息,请参阅较低的通用公共许可证。
您应该已经收到GNU Lesser General Public的副本
许可证以及GNUC库;如果没有,请参阅
. */
字符串[]全局(字符串模式)
{
输入标准字符串;
字符串[]结果;
glob_t glob_结果;
glob(pattern.toStringz、0、null和glob_结果);
对于(uint i=0;iauto dirIter = dirEntries("/usr", "*/python*", SpanMode.shallow);
foreach(dirFile; dirIter) {
// Process the result as needed
上面的答案没有一个与Windows和Linux上的Glob完全相同。所以我做了一个小的D模块,它以正确的方式运行。希望人们发现它有用:
导入标准stdio:stdout;
导入glob:glob;
foreach(条目;glob(“/usr/*/python*”){
stdout.writefln(“%s”,条目);
}
这不太管用。glob模式似乎无法跨目录工作。dirEntries
是一个范围,因此您可以通过它进行筛选,但它当然会遍历所有文件:/D的标准库只能进行路径筛选(例如dirEntries
)。值得一个增强请求吗?即使这不是使用火卫一,它看起来是一个足够好的解决方案。谢谢。别忘了为火卫一干杯;-)将只在一个级别上迭代-因此您的示例不会返回任何文件。见例。不幸的是,使用D还没有简单的方法来实现这一点:/我猜OP想列出所有以python
开头并位于/usr/*
,否?)的目录。是的,但是带有usr
和shall
的dirEntries看起来只有一层深(例如/usr/share
)