Python:str.startswith()和字符串比较==&引用;不起作用

Python:str.startswith()和字符串比较==&引用;不起作用,python,string,comparison,python-2.x,python-2.6,Python,String,Comparison,Python 2.x,Python 2.6,我试图从文件中读取字符串并查找以“'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

我试图从文件中读取字符串并查找以“'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.")): 
但产出是一样的。怎么了?我能做什么?

基于此

for word in line.split():
        if(word == "'fieldname':"):
            fieldnametemp.append(line.split(':')[1])
fieldnametemp
中的每个元素都以空格开头。因此,执行
element.startswith(“'param.”)时,
元素的内容也以空格开头,因此实际上执行了以下操作:

 " 'param.abc'".startswith("'.param")
这显然是错误的。您需要包含空格:

element.startswith(" 'param.")
基于此,

for word in line.split():
        if(word == "'fieldname':"):
            fieldnametemp.append(line.split(':')[1])
fieldnametemp
中的每个元素都以空格开头。因此,执行
element.startswith(“'param.”)时,
元素的内容也以空格开头,因此实际上执行了以下操作:

 " 'param.abc'".startswith("'.param")
这显然是错误的。您需要包含空格:

element.startswith(" 'param.")

打印报告(元素)
可以得到什么?我怀疑字符串不是您所认为的那样(可能是空格、unicode字符等?)可能是您的问题中的缩进错误,但看起来元素实际上是以空格开头的。是否有一些原因导致您没有反序列化JSON并操纵Python对象以获得所需的内容?请尝试
如果“'param.”在元素中:
而不是作为一个测试。是的,看起来那里有一个空格。你从
打印报告(元素)
中得到了什么?我怀疑字符串不是您所认为的那样(可能是空格、unicode字符等?)可能是您的问题中的缩进错误,但看起来元素实际上是以空格开头的。是否有一些原因导致您没有反序列化JSON并操纵Python对象以获得所需的内容?请尝试
如果“'param.”在元素中:
而不是作为一个测试。是的,看起来那里有一个空格。我知道我们已经确定那里有一些空格,但我看不出您的第一段代码是如何表明这一点的。
line.split()
在空格处拆分,并生成
'fieldname':
,,所以在“:”后面必须有一个空格。接下来,在“:”处以不同的方式拆分该行。因为我们知道它后面有一个空格,所以空格将位于
split()
result.ah!的第二个条目的开头!很好的推论。我知道我们已经确定其中有一些空格,但我不明白您的第一段代码是如何表明这一点的。
line.split()
在空格处拆分,并生成
'fieldname':
,因此在“:”后面必须有一个空格。接下来,在“:”处以不同的方式拆分该行。因为我们知道它后面有一个空格,所以空格将位于
split()
result.ah!的第二个条目的开头!精彩的演绎。