Python中的字符串不匹配,即使它们具有相同的值

Python中的字符串不匹配,即使它们具有相同的值,python,string,python-2.7,comparison,Python,String,Python 2.7,Comparison,我不想在我的应用程序中保留密钥,而是想将密钥从本地文件系统读入一个变量(字符串数组),并在oAuth API中使用这些数组元素。但是,当我使用密钥(明文)作为OAuth API的参数时,身份验证成功。但是,当文件中的相同值读入变量时,身份验证失败&该变量被传递到OAuth API。 尝试比较键值和变量值,但发现它们不匹配,尽管它们完全相同 输入文件如下所示: $cat .keys k1='jFOMZ0bI60fDAEKw53lYCj2r4' k2='LNkyPehneIi8HeqTg1ji74H

我不想在我的应用程序中保留密钥,而是想将密钥从本地文件系统读入一个变量(字符串数组),并在oAuth API中使用这些数组元素。但是,当我使用密钥(明文)作为OAuth API的参数时,身份验证成功。但是,当文件中的相同值读入变量时,身份验证失败&该变量被传递到OAuth API。 尝试比较键值和变量值,但发现它们不匹配,尽管它们完全相同

输入文件如下所示:

$cat .keys
k1='jFOMZ0bI60fDAEKw53lYCj2r4'
k2='LNkyPehneIi8HeqTg1ji74H42jFkkBxZolRfzNFmaJKwLg7R7E'

输出:

jFOMZ0bI60fDAEKw53lYCj2r4
False
我在这里遗漏了什么?

您应该找到从文件中读取的密钥,因为它有一个尾随
\n

print(secret_keys[0].strip() == "jFOMZ0bI60fDAEKw53lYCj2r4")
或者在阅读时这样做:

for key in range(1,5):
    secret_keys.append(key_file.readline().split("=")[1].strip())
您应该选择从文件中读取的密钥,因为它有一个尾随
\n

print(secret_keys[0].strip() == "jFOMZ0bI60fDAEKw53lYCj2r4")
或者在阅读时这样做:

for key in range(1,5):
    secret_keys.append(key_file.readline().split("=")[1].strip())

如果前导和尾随字符困扰您,请使用切片删除它们,即
[1:-1]
删除前导和尾随字符的引号

我还对您的函数进行了一些重构:

def keys_io():
    with open('.keys', 'r+') as f:
        for line in f:
            secret_keys.append(line.split('=')[1].strip()[1:-1])

    print secret_keys[0]
    print (secret_keys[0] == "jFOMZ0bI60fDAEKw53lYCj2r4"
  • 使用上下文管理器自动打开/关闭文件
  • 如果需要检查所有行,请对中的行使用
    ,而不是使用其他方法
  • 使用不带参数的
    strip()
    删除不需要的空间

在这些更改之后,
keys\u io
文件在使用您提供的
.key
文件时对我来说非常有用。

如果前导和尾随字符困扰您,请使用切片删除它们,即
[1:-1]
删除最后一个引号

我还对您的函数进行了一些重构:

def keys_io():
    with open('.keys', 'r+') as f:
        for line in f:
            secret_keys.append(line.split('=')[1].strip()[1:-1])

    print secret_keys[0]
    print (secret_keys[0] == "jFOMZ0bI60fDAEKw53lYCj2r4"
  • 使用上下文管理器自动打开/关闭文件
  • 如果需要检查所有行,请对中的行使用
    ,而不是使用其他方法
  • 使用不带参数的
    strip()
    删除不需要的空间

在这些更改之后,
keys\u io
文件在使用您提供的
.key
文件时对我来说非常有用。

从Python读取文本文件时,需要首先转义新行字符。另一个问题是在输入文本之间有一个引号。因此,您需要对以下内容进行更改:

secret_keys.append(key_file.readline().strip().split("=")[1])


从Python读取文本文件时,首先需要转义新行字符。另一个问题是在输入文本之间有一个引号。因此,您需要对以下内容进行更改:

secret_keys.append(key_file.readline().strip().split("=")[1])


从文件中读取的键仍有一个前导和一个尾随((单引号)已删除的前导和尾端单引号。仍然是相同的结果如何输出打印报告(密钥[0])
。从文件读取时没有尾随的
\n
?比较长度显示了什么?是的,在secret_key[0]的尾端\n您从文件中读取的密钥仍然有一个前导和尾随((单引号)删除了前导和尾端单引号。仍然是相同的结果如何输出打印报告(密钥[0])
。从文件读取时没有尾随的
\n
?比较长度显示了什么?是的,在密匙[0]的尾端有我们\n“使用不带参数的strip()删除不需要的空间。”和新行字符:)“使用不带参数的strip()删除不需要的空间。”和新行字符:)