【问题标题】:Python: str.startswith() and string comparison "==" not workingPython:str.startswith() 和字符串比较“==”不起作用
【发布时间】:2018-02-08 10:18:25
【问题描述】:

我正在尝试从文件中读取字符串并查找以"'param." 开头的单词这是我的代码:

# -*- coding: utf-8 -*-

inputfile = open('abc.json', 'r')

fieldnametemp = []

for line in inputfile:
    for word in line.split():
        if(word == "'fieldname':"):
            fieldnametemp.append(line.split(':')[1])

for element in fieldnametemp:
    print element
    if(element.startswith("'param.")):
        print 1
    else:
        print 0

这是我的输出:

     'param.design_key',

    0
     'param.abc',

    0
     'param.def',

    0

即使它以“'param”开头。它打印 0。

我也试过用

if(element.split('.')[0] == "'param."): 

而不是

if(element.startswith("'param.")): 

但是输出是一样的。出了什么问题,我该怎么办?

【问题讨论】:

  • print repr(element) 能得到什么?我怀疑该字符串不是您认为的那样(可能是空格、unicode 字符等?)
  • 可能是您的问题中的缩进错误,但看起来元素实际上以空格开头
  • 是否有某些原因您没有反序列化 JSON 并操作 Python 对象以获得您想要的?
  • 试试if "'param." in element: 作为测试。
  • 是的,好像有空格。

标签: python string comparison python-2.x python-2.6


【解决方案1】:

基于此

for word in line.split():
        if(word == "'fieldname':"):
            fieldnametemp.append(line.split(':')[1])

fieldnametemp 中的每个元素都以空格开头。所以element的内容在你做element.startswith("'param.")的时候也是以空格开头的,所以你实际上是在做:

 " 'param.abc'".startswith("'.param")

这显然是错误的。您需要包含空格:

element.startswith(" 'param.")

【讨论】:

  • 我知道我们已经确定其中有一些空格,但我看不出您的第一段代码如何表明一定是这样。
  • line.split() 在空格处分割并产生'fieldname': ,,所以':'后面必须有一个空格。接下来,该行以不同的方式在“:”处拆分。因为我们知道它后面跟着一个空格,所以空格将在 split() 结果的第二个条目的开头。
  • 啊!出色的演绎。
猜你喜欢
  • 2011-09-20
  • 2014-04-03
  • 2012-01-22
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多