标签: glob

Python、ImageMagick 和“子进程”

我正在尝试通过从 Python 脚本调用 ImageMagick 来组装图像,montage如下所示:

 command = "montage"
 args = "-tile {}x{} -geometry +0+0 \"*.png\" out.png".format( width, height)
 sys.stdout.write( "  {} {}\n".format(command, args) )
 print subprocess.call( [command, args] )
Run Code Online (Sandbox Code Playgroud)

然而,蒙太奇仅显示用法。如果我手动运行命令,一切正常。ImageMagick 应该支持 Windows 中的文件名通配,因此 *.png 被扩展。但显然,这种行为受到了压制subprocess。我是否必须使用文件名列表来glob提供信息?montage

更多信息 到目前为止谢谢。但即使当我使用:

command = "montage"
tile = "-tile {}x{}".format( width, height)
geometry = "-geometry +0+0"
infile = "*.png"
outfile = "out.png"
sys.stdout.write( "  {} {} {} {} {}\n".format(command, tile, geometry, infile, outfile) )
print [command, tile, geometry, infile, …
Run Code Online (Sandbox Code Playgroud)

python parameters glob imagemagick

2
推荐指数
1
解决办法
5004
查看次数

正则表达式中的 * 和 .* 有什么区别?

*我看到在某些命令中使用了通配符,例如: find *.jpg,这意味着查找任何以.jpg. 然而,在正则表达式中,.*也意味着任意字符出现 0 次或多次。那么,它们之间有什么区别呢?什么时候*用过,什么时候用.*

regex glob wildcard

2
推荐指数
2
解决办法
2594
查看次数

在 Bash 中,如何比较两个文件(不区分大小写)

我想出了如何比较两个文件并使用其状态代码来查看文件是否相同。问题是,它仅在比较区分大小写时才有效。我使用了 cmp 命令的状态码。

我怀疑我要使用通配符(即“ [Aa][Bb][Cc][等等...] ”)。但我不知道如何将其实现到 cmp 命令中。

bash comparison glob

2
推荐指数
1
解决办法
5297
查看次数

获取 gulp.src 中除缩小文件之外的所有文件

我尝试选择除缩小文件之外的所有文件。

我有这个文件结构:

lib/
    angular/
        angular.js
        angular.min.js
    lodash/
        lodash.js
        lodash.min.js
Run Code Online (Sandbox Code Playgroud)

我试试这个:

var pattern = ["./lib/**/*!(.min).*"];
gulp.src(pattern).pipe(using({}));
Run Code Online (Sandbox Code Playgroud)

但这不起作用:我得到了所有文件,即使它们被缩小了。

(通过 gulp-using 我得到:

[gulp] Using file ./lib/angular/angular.js
[gulp] Using file ./lib/angular/angular.min.js
[gulp] Using file ./lib/lodash/lodash.js
[gulp] Using file ./lib/lodash/lodash.min.js
Run Code Online (Sandbox Code Playgroud)

任何想法 ?

预先感谢您的帮助

glob minimatch gulp

2
推荐指数
1
解决办法
1242
查看次数

变量名扩展多重替换

我想知道如何用变量扩展替换多种模式。

VAR=A_B_C_D_E
Run Code Online (Sandbox Code Playgroud)

我想要的结果是A_C_E不使用临时变量。

RESULT_TMP=${VAR/_B/}
RESULT=${RESULT_TMP/_D/}
Run Code Online (Sandbox Code Playgroud)

我做了一些这样的尝试:

${${VAR/_B/}/_D/}
Run Code Online (Sandbox Code Playgroud)

没有任何成功。

任何想法?

bash glob

2
推荐指数
1
解决办法
44
查看次数

使用 glob python 读取具有特定扩展名的目录中的所有文件

我有一个目录,其中包含更多子目录,每个子目录都有具有特定扩展名的文件。我可以使用 glob 函数获取所有文件的名称:

for name in glob.glob('*/*[a-b]*'):
      print(os.path.basename(name))
Run Code Online (Sandbox Code Playgroud)

打印我在所有子目录中的文件名:

PF44_aa
PF52_aa
PF95_aa
PF38_aa
PF45_aa
PF63_aa
PF68_aa
PF39_aa
Run Code Online (Sandbox Code Playgroud)

但是,如果我将这些文件名作为参数传递以打开文件并读取内容:

for name in glob.glob('*/*[a-b]*'):
    filename=os.path.basename(name)
    with open('%s' %filename) as fn:
        content = fn.readlines() 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

 File "<ipython-input-194-147f38fc2684>", line 1, in <module>
    with open('%s' %filename) as fn:

FileNotFoundError: [Errno 2] No such file or directory: 'PF44_aa'
Run Code Online (Sandbox Code Playgroud)

我还尝试直接将文件名作为输入而不是%s

for name in glob.glob('*/*[a-b]*'):
    filename=os.path.basename(name)
    with open(filename) as fn:
        content = fn.readlines() 
Run Code Online (Sandbox Code Playgroud)

但仍然遇到同样的错误:

File "<ipython-input-193-fb125b5aa813>", line 1, in <module>
    with open(filename) as fn:

FileNotFoundError: [Errno …
Run Code Online (Sandbox Code Playgroud)

python glob file

2
推荐指数
1
解决办法
6974
查看次数

将 bash =~ 运算符更改为 sh 兼容参数

所以我在coreos中运行一个bash脚本,因此我没有/bin/bash但是我有/bin/sh。现在 sh 一直很好,直到我使用别人的 bash 脚本并且他们有以下行。

 if [[ "$file" =~ ^https?:// ]]; then
Run Code Online (Sandbox Code Playgroud)

我的操作系统sh: =~: unknown operand现在抱怨我认为这意味着操作~=符与 sh 不兼容,但必须有其他方法来执行此表单查看所以我发现这~=是某种类型的正则表达式运算符。我的问题是这样我可以~=用什么来代替吗?注意:我的机器上有 grep。

regex bash grep glob sh

2
推荐指数
1
解决办法
1125
查看次数

Perl:变量值是“glob”,但应该是“scalar”

我确实有以下简单的代码:

my $TimeZone = $hCache->{'TimeZone'}; # Cache gets filled earlier
my $DateTime = DateTime->now();
$DateTime->set_time_zone($TimeZone);
Run Code Online (Sandbox Code Playgroud)

这段代码运行在一个应用服务器中,它基本上是一个长时间运行的 perl 进程,它接受传入的网络连接。

这个应用程序服务器有时会变得“脏”,上面的代码打印出以下错误:

DateTime::TimeZone::new 的“name”参数(“Europe/Berlin”)是一个“glob”,它不是允许的类型之一:/srv/epages/eproot/Perl/lib/site_perl/ 处的标量linux/DateTime.pm 第 1960 行。

当我尝试调试变量“$TimeZone”时,我没有得到更多细节。

例如

print ref($TimeZone); # prints nothing (scalar?)
print $TimeZone; # prints "Europe/Berlin"
Run Code Online (Sandbox Code Playgroud)

如果我强制时区再次成为字符串,则代码有效,如下所示:

my $TimeZone = $hCache->{'TimeZone'}; # Cache gets filled earlier
my $DateTime = DateTime->now();
$DateTime->set_time_zone($TimeZone."");
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 如果 'glob' 不是引用,我该如何正确调试变量?
  2. 如何创建“glob”变量?它的语法是什么?我很确定我庞大的代码库中有一些意外,但我不知道要搜索什么。
  3. 有没有办法“监控”变量?基本上,如果变量发生变化,就会获得堆栈跟踪

variables perl glob

2
推荐指数
1
解决办法
71
查看次数

使用 bash 删除部分文件名

为什么这个脚本不起作用?

for filename in bre*; do 
    rename 's/bre//'; 
done
Run Code Online (Sandbox Code Playgroud)

我在目录中有以 bre 开头的文件,我想从文件名中删除这部分。它正在运行,什么都不会发生,它还没有完成。谢谢

bash loops glob file-rename batch-rename

2
推荐指数
1
解决办法
31
查看次数

如何将 .write() 用于外语字符(ã、à、ê、ó、...)

我正在 Python 3 中处理一个小项目,我必须扫描一个装满文件的驱动器并输出一个 .txt 文件,其中包含驱动器内所有文件的路径。问题是一些文件是巴西葡萄牙语,其中包含“重音字母”,例如“não”、“você”等,而这些特殊字母在最终的 .txt 中被错误地输出。

代码只是下面这几行:

import glob

path = r'path/path'

files = [f for f in glob.glob(path + "**/**", recursive=True)]

with open("file.txt", 'w') as output:
    for row in files:
        output.write(str(row.encode('utf-8') )+ '\n')
Run Code Online (Sandbox Code Playgroud)

输出示例

path\folder1\Treino_2.doc
path\folder1\Treino_1.doc
path\folder1\\xc3\x81gua de Produ\xc3\xa7\xc3\xa3o.doc
Run Code Online (Sandbox Code Playgroud)

最后一行显示了一些输出是如何错误的,因为x81gua de Produ\xc3\xa7\xc3\xa3o应该是Régua de Produção

python encoding glob python-3.x

2
推荐指数
1
解决办法
67
查看次数