考虑以下代码:
test_string = 'not empty'
if test_string:
return True
else:
return False
Run Code Online (Sandbox Code Playgroud)
我知道我可以构造一个条件表达式来做到这一点:
return True if test_string else False
Run Code Online (Sandbox Code Playgroud)
但是,当我宁愿返回布尔值时,我不喜欢测试布尔值是真还是假.我怎么才能恢复它的真实性?
我有一个图像,我试图使用skimage.PiecewiseAffineTransform和来扭曲skimage.warp。我有一组控制点 ( true) 映射到一组新的控制点 ( ideal),但扭曲没有返回我期望的结果。
在这个例子中,我有一个简单的波长梯度,我试图将其“拉直”成列。(您可能会问为什么我要查找轮廓和插值,但那是因为我实际上将此代码应用于更复杂的用例。我只是想重现这个简单示例的所有代码,这会导致相同的奇怪输出。)
为什么我的输出图像只是将输入图像扭曲成正方形和插图?我正在使用 Python 2.7.12 和 matplotlib 1.5.1。这是代码。
import matplotlib.pyplot as plt
import numpy as np
from skimage import measure, transform
true = np.array([range(i,i+10) for i in range(20)])
ideal = np.array([range(10)]*20)
# Find contours of ideal and true images and create list of control points for warp
true_control_pts = []
ideal_control_pts = []
for lam in ideal[0]:
try:
# Get the isowavelength contour in the true and ideal images …Run Code Online (Sandbox Code Playgroud) 让 exp = [1,2,3,4,5]
如果我然后执行x in exp,它会给我False.但是如果我执行:
for x in exp:
if x==3:
print('True')
Run Code Online (Sandbox Code Playgroud)
然后执行x in exp,它返回True.这里发生了什么事?我没有给x分配任何东西.我有吗?我真的很困惑.
**编辑:**对不起,如果我之前没有说过:x之前没有定义.
谢谢大家.我现在明白了.的元素exp被分配给x作为exp被遍历.并且在最后一行代码中x in exp等于True,因为最后一个元素已被分配给x.
在阅读有关高级Perl编程(1)的书时,我遇到了这段代码:
while (defined($s = <>)) {
...
Run Code Online (Sandbox Code Playgroud)
defined在这里使用有什么特别的理由吗?perlop的 文档
说:
在这些循环结构中,然后测试指定的值(无论是自动还是显式赋值)以查看它是否已定义.定义的测试避免了line具有字符串值的问题,该字符串值将被Perl视为false,例如a
""或"0"没有尾随换行符.如果你真的想要这些值来终止循环,那么它们应该被明确地测试:[...]
那么,是否会有一个角落案例,或者仅仅是因为这本书太旧而且defined在最近的Perl版本中添加了自动测试?
(1) 高级Perl编程,第一版,Sriram Srinivasan.奥莱利(1997)
我想打印文件详细信息以及grep输出但无法这样做.例如,对于命令
grep 3456 A.txt
Run Code Online (Sandbox Code Playgroud)
我得到了输出
A.txt
Run Code Online (Sandbox Code Playgroud)
但是想要输出
-rw-rw-r-- 1 tarun tarun 41356911 Aug 25 01:31 A.txt
Run Code Online (Sandbox Code Playgroud)
我尝试了以下但没有成功:
grep 34567 A.txt | xargs ls -tlr
grep 34567 A.txt | while read line ; do echo "$line" | date %s.%N ; done
grep -Hr 34567 A.txt | awk -F: '{"stat -c %z "$1 | getline r; print r": "$0 }'
grep 34567 A.txt | awk -F: '{"date -r \""$1"\" +\"%F %R\"" | getline d; print d,$0}'
请考虑以下示例脚本:
#!/bin/sh
do_something() {
echo $@
return 1
}
cat <<EOF > sample.text
This is a sample text
It serves no other purpose
EOF
cat sample.text | while read arg1 arg2 arg3 arg4 arg5; do
ret=0
do_something "$arg1" "$sarg2" "$arg3" "$arg4" "$arg5" <&3 || ret=$?
done 3<&1
Run Code Online (Sandbox Code Playgroud)
重定向stdout为filedescriptor 3的输入的目的是什么?至少在Bash,如果省略它似乎没有任何区别.如果它在任何其他shell中执行,它会有什么影响bash吗?
UPDATE
对于那些想知道它来自哪里的人来说,它是来自Debian cryptdisks_start脚本的简化示例.
假设我有一个我调用的python程序
python main.py
Run Code Online (Sandbox Code Playgroud)
我想将这个程序包装成一个调用的shell脚本execute,可以事先做一些设置
#!/bin/bash
# Do something interesting
python main.py
Run Code Online (Sandbox Code Playgroud)
现在让我们说我想使用管道
./execute < inputData.txt > outputData.txt
Run Code Online (Sandbox Code Playgroud)
我应该如何将这些管道(或|管道)重定向到我的python脚本?
像下面的东西,但更通用(我不知道我的输入和输出文件的名称,或者是否有管道,也许我只是想要stdin/stdout)
python main.py < inputData.txt > outputData.txt
Run Code Online (Sandbox Code Playgroud)
一个快速的黑客就是让我的python可执行文件运行而不是将它包装在shell脚本中,但我更感兴趣的是学习管道.
我试图理解一些内置的Python模块是如何工作的.
例如,使用代码:
from Tkinter import *
root = Tk()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
功能的定义在哪里Tk?
我一直在搜索tkinter源代码但找不到它.代码几次调用import Tkinter也很奇怪,因为这是 Tkinter,为什么它自己导入?
希望有人能帮助解决我的困惑
我怎样才能使split(/\t/, $STRING)检测空项目时,$STRING两端用"\t\t"?
使用Perl脚本,我试图根据项目之间的分隔符来分割字符串,然后计算并使用这些项目。但是,当字符串以s结尾时,脚本不会计算空项目。
例:
string="value1\tvalue2\t\t\t\t" (值1,值2和4个空项目)
但计数2个项目(值1,值2):
$STRING="value1\tvalue2\t\t\t\t";
print $STRING."\n";
my @F = split(/\t/, $STRING);
print scalar(@F)."\n";
# The number of items must match the number of header name
if( scalar(@F) == 6 )
{
print "Done \n";
}
Run Code Online (Sandbox Code Playgroud)
代码显示:
value1 value2
2
Run Code Online (Sandbox Code Playgroud)
而预期的是:
value1 value2
6
Run Code Online (Sandbox Code Playgroud) 我有一个设置用于从文本文件中检索数据的Perl脚本,但有一件事情不会显示是以星号开头的.这是我的代码:
while(<INFILE>) {
chomp $_;
if (m/^\s*$/) {
next;
}
my @fields = split(/\ /,$_);
my @output;
foreach my $field(@fields) {
if($field =~ /^\*?[ABMQRWY][A-Z0-9]{4}235 / ) {
push @output,$field;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的if语句抓住了8个字符长的所有内容,但有时在作业面前有*它不会拉动.我该如何包含它?我知道我需要逃避它,但不知道该把它放在哪里.
以下是我要提取的数据的一些示例:
W50DW235 DW
M50DW235 DW
Q0608235 08
APJ40235 40
M3515235 15
M34DW235 DW
M3408235 08
RES08235 08
BSP20235 20
W1208235 08
B3008235 08
Run Code Online (Sandbox Code Playgroud)
这是文件中的原始行:
18122/0655 18122/0700 W50DW235 DW LEV001 002 D50DW235
18122/0735 18122/0740 M50DW235 DW LEV002 002 W50DW235
Run Code Online (Sandbox Code Playgroud)
它不会用星号拉出的线是这样的:
18123/0300 18123/0400 *D1708235 08 LEV001 001
Run Code Online (Sandbox Code Playgroud)
为了提取数据,我使用以下方法来捕获具有两个空格的项目:
my …Run Code Online (Sandbox Code Playgroud) python ×4
bash ×3
perl ×3
shell ×3
string ×2
boolean ×1
contains ×1
escaping ×1
filehandle ×1
for-loop ×1
grep ×1
linux ×1
loops ×1
membership ×1
numpy ×1
pipe ×1
python-2.7 ×1
redirect ×1
regex ×1
scikit-image ×1
sequence ×1
tkinter ×1
trailing ×1
truthiness ×1
while-loop ×1
whitespace ×1
xargs ×1