Python是否有类似空字符串变量的功能,您可以在其中执行以下操作:
if myString == string.empty:
无论如何,检查空字符串值最优雅的方法是什么?我发现每次检查空字符串的硬编码“”都不太好。
Python是否有类似空字符串变量的功能,您可以在其中执行以下操作:
if myString == string.empty:
无论如何,检查空字符串值最优雅的方法是什么?我发现每次检查空字符串的硬编码“”都不太好。
当前回答
当您逐行读取文件并想确定哪一行是空的时,请确保使用.strip(),因为“空”行中有换行符:
lines = open("my_file.log", "r").readlines()
for line in lines:
if not line.strip():
continue
# your code for non-empty lines
其他回答
如果您想区分空字符串和空字符串,我建议使用If-len(string),否则,我建议像其他人所说的那样简单地使用If-string。但是,关于充满空格的字符串的警告仍然适用,所以不要忘记剥离。
我发现每次检查空字符串的硬编码(sic)“”都不太好。
清洁代码方法
这样做:foo==“”是非常糟糕的做法。“”是一个神奇的值。你不应该检查魔法值(更常见的是魔法数字)
您应该做的是与描述性变量名称进行比较。
描述性变量名称
人们可能认为“empty_string”是一个描述性变量名称。它不是。
在你去做empty_string=“”并认为你有一个很好的变量名来比较之前。这不是“描述性变量名”的意思。
一个好的描述性变量名是基于其上下文的。你必须考虑空字符串是什么。
它从哪里来。为什么在那里。为什么你需要检查它。
简单表单字段示例
您正在构建一个用户可以输入值的表单。你想检查用户是否写了什么。
一个好的变量名可能是not_fill_in
这使得代码非常可读
if formfields.name == not_filled_in:
raise ValueError("We need your name")
完整的CSV解析示例
您正在解析CSV文件,并希望将空字符串解析为None
(由于CSV完全基于文本,因此在不使用预定义关键字的情况下无法表示None)
一个好的变量名可能是CSV_NONE
如果您有一个新的CSV文件,该文件用“”以外的另一个字符串表示None,则可以轻松更改和调整代码
if csvfield == CSV_NONE:
csvfield = None
这段代码是否正确是没有问题的。很明显,它做了它应该做的事情。
将此与
if csvfield == EMPTY_STRING:
csvfield = None
这里的第一个问题是,为什么空字符串值得特殊处理?
这将告诉未来的编码器,空字符串应该始终被视为None。
这是因为它混合了业务逻辑(CSV值应该是None)和代码实现(我们实际比较的是什么)
这两者之间需要分开关注。
我对“”、“”和“\n”等字符串进行了一些实验。当且仅当变量foo是至少包含一个非空白字符的字符串时,我希望isNotWhitespace为True。我使用的是Python 3.6。以下是我的结论:
isWhitespace = str is type(foo) and not foo.strip()
isNotWhitespace = str is type(foo) and not not foo.strip()
如果需要,将其包装在方法定义中。
我会在剥离之前测试无。此外,我将使用空字符串为False(或Falsy)的事实。这种方法类似于Apache的StringUtils.isBlank或Guava的Strings.isNullOrEmpty
这是我用来测试字符串是否为None或Empty或Blank的方法:
def isBlank (myString):
return not (myString and myString.strip())
如果字符串不是None NOR Empty NOR Blank,则与测试正好相反:
def isNotBlank (myString):
return bool(myString and myString.strip())
以下是适用于任意数量空间的优雅解决方案。
def str_empty(s: str) -> bool:
"""Strip white space and count remaining characters."""
return len(s.strip()) < 1
>>> str_empty(' ')
True