我正在尝试通过从 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) *我看到在某些命令中使用了通配符,例如: find *.jpg,这意味着查找任何以.jpg. 然而,在正则表达式中,.*也意味着任意字符出现 0 次或多次。那么,它们之间有什么区别呢?什么时候*用过,什么时候用.*?
我想出了如何比较两个文件并使用其状态代码来查看文件是否相同。问题是,它仅在比较区分大小写时才有效。我使用了 cmp 命令的状态码。
我怀疑我要使用通配符(即“ [Aa][Bb][Cc][等等...] ”)。但我不知道如何将其实现到 cmp 命令中。
我尝试选择除缩小文件之外的所有文件。
我有这个文件结构:
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)
)
任何想法 ?
预先感谢您的帮助
我想知道如何用变量扩展替换多种模式。
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)
没有任何成功。
任何想法?
我有一个目录,其中包含更多子目录,每个子目录都有具有特定扩展名的文件。我可以使用 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) 所以我在coreos中运行一个bash脚本,因此我没有/bin/bash但是我有/bin/sh。现在 sh 一直很好,直到我使用别人的 bash 脚本并且他们有以下行。
if [[ "$file" =~ ^https?:// ]]; then
Run Code Online (Sandbox Code Playgroud)
我的操作系统sh: =~: unknown operand现在抱怨我认为这意味着操作~=符与 sh 不兼容,但必须有其他方法来执行此表单查看所以我发现这~=是某种类型的正则表达式运算符。我的问题是这样我可以~=用什么来代替吗?注意:我的机器上有 grep。
我确实有以下简单的代码:
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)
我的问题是:
为什么这个脚本不起作用?
for filename in bre*; do
rename 's/bre//';
done
Run Code Online (Sandbox Code Playgroud)
我在目录中有以 bre 开头的文件,我想从文件名中删除这部分。它正在运行,什么都不会发生,它还没有完成。谢谢
我正在 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
glob ×10
bash ×4
python ×3
regex ×2
batch-rename ×1
comparison ×1
encoding ×1
file ×1
file-rename ×1
grep ×1
gulp ×1
imagemagick ×1
loops ×1
minimatch ×1
parameters ×1
perl ×1
python-3.x ×1
sh ×1
variables ×1
wildcard ×1