Python 中的字符串不匹配,即使它们具有相同的值
string mismatch in Python even if they have same value
我没有将密钥保存在我的应用程序中,而是打算将密钥从本地文件系统读取到一个变量(字符串数组)中,并在我的 oAuth API 中使用这些数组元素。但是,当我使用密钥(以明文形式)作为 OAuth APIs 的参数时,身份验证成功。但是,当从文件中读取相同的值并将该变量传递给 OAuth API 时,身份验证失败。
尝试比较键值和变量值 t 发现它们不匹配,尽管它们完全相同。
输入文件如下所示:
$cat .keys
k1='jFOMZ0bI60fDAEKw53lYCj2r4'
k2='LNkyPehneIi8HeqTg1ji74H42jFkkBxZolRfzNFmaJKwLg7R7E'
secret_keys=[]
def keys_io():
key_file = open('/Users/homie/.keys', 'r+')
for key in range(1,5):
secret_keys.append(key_file.readline().split("=")[1])
print secret_keys[0]
print (secret_keys[0] == "jFOMZ0bI60fDAEKw53lYCj2r4")
keys_io()
输出:
jFOMZ0bI60fDAEKw53lYCj2r4
False
我在这里错过了什么?
您应该 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"
- 使用上下文管理器自动 open/close 您的文件。
- 如果需要检查所有行,请使用
for line in <opened_file>
而不是其他方法。
- 使用不带参数的
strip()
来删除不需要的 space。
经过这些更改后,keys_io
文件在使用您提供的 .key
文件时对我来说就像一个魅力。
当您从Python读取文本文件时,您需要先对换行符进行转义。另一个问题是输入文本之间有单引号。所以您需要更改为:
secret_keys.append(key_file.readline().strip().split("=")[1])
和
if(secret_keys[0] == "\'jFOMZ0bI60fDAEKw53lYCj2r4\'"):
我没有将密钥保存在我的应用程序中,而是打算将密钥从本地文件系统读取到一个变量(字符串数组)中,并在我的 oAuth API 中使用这些数组元素。但是,当我使用密钥(以明文形式)作为 OAuth APIs 的参数时,身份验证成功。但是,当从文件中读取相同的值并将该变量传递给 OAuth API 时,身份验证失败。 尝试比较键值和变量值 t 发现它们不匹配,尽管它们完全相同。
输入文件如下所示:
$cat .keys
k1='jFOMZ0bI60fDAEKw53lYCj2r4'
k2='LNkyPehneIi8HeqTg1ji74H42jFkkBxZolRfzNFmaJKwLg7R7E'
secret_keys=[]
def keys_io():
key_file = open('/Users/homie/.keys', 'r+')
for key in range(1,5):
secret_keys.append(key_file.readline().split("=")[1])
print secret_keys[0]
print (secret_keys[0] == "jFOMZ0bI60fDAEKw53lYCj2r4")
keys_io()
输出:
jFOMZ0bI60fDAEKw53lYCj2r4
False
我在这里错过了什么?
您应该 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"
- 使用上下文管理器自动 open/close 您的文件。
- 如果需要检查所有行,请使用
for line in <opened_file>
而不是其他方法。 - 使用不带参数的
strip()
来删除不需要的 space。
经过这些更改后,keys_io
文件在使用您提供的 .key
文件时对我来说就像一个魅力。
当您从Python读取文本文件时,您需要先对换行符进行转义。另一个问题是输入文本之间有单引号。所以您需要更改为:
secret_keys.append(key_file.readline().strip().split("=")[1])
和
if(secret_keys[0] == "\'jFOMZ0bI60fDAEKw53lYCj2r4\'"):