Python 3读取API密钥文件出现方括号致API签名错误求助
解决从文件读取API密钥时的列表格式问题
嘿,我完全懂你的困扰!从文件读取密钥时得到带方括号的列表,而不是纯字符串,这就是API签名报错的根源——因为签名算法需要的是字符串格式的密钥,而不是列表。
问题原因
你用了readline().splitlines(),这个方法的返回值是列表类型,哪怕文件里只有一行内容,它也会把这行包装成一个单元素列表,所以你看到的['Your API Key']就是这个结果。而硬编码时你直接赋值的是字符串,格式匹配,所以API调用正常。
快速解决方案
有两种简单的方法可以把列表转成纯字符串:
方法1:直接取列表的第一个元素
因为你每次readline()只读取一行,splitlines()返回的列表里只有一个元素,直接通过索引[0]取出即可:
def connect(): f = open("Test-API.txt", "r") if f.mode == 'r': api_key = f.readline().splitlines()[0] api_secret = f.readline().splitlines()[0] print(repr(api_key)) # 输出:'Your API Key' print(repr(api_secret)) # 输出:'Your API Secret' f.close() # 硬编码对比测试 api_key = 'Your API Key' api_secret = 'Your API Secret' print(repr(api_key)) print(repr(api_secret)) connect()
方法2:用strip()替代splitlines()(更推荐)
readline()会读取到换行符\n,用strip()可以直接去掉字符串首尾的空白字符(包括换行符),同时直接得到字符串类型的结果,不需要处理列表:
def connect(): f = open("Test-API.txt", "r") if f.mode == 'r': api_key = f.readline().strip() api_secret = f.readline().strip() print(repr(api_key)) # 输出:'Your API Key' print(repr(api_secret)) # 输出:'Your API Secret' f.close() # 硬编码对比测试 api_key = 'Your API Key' api_secret = 'Your API Secret' print(repr(api_key)) print(repr(api_secret)) connect()
更健壮的写法:使用with语句
处理文件时,推荐用with语句,它会自动帮你关闭文件,避免忘记close()导致的资源泄漏:
def connect(): with open("Test-API.txt", "r") as f: api_key = f.readline().strip() api_secret = f.readline().strip() print(repr(api_key)) print(repr(api_secret)) # 硬编码对比测试 api_key = 'Your API Key' api_secret = 'Your API Secret' print(repr(api_key)) print(repr(api_secret)) connect()
替换后,你读取到的密钥就和硬编码的格式完全一致了,API签名应该就能正常通过啦!
内容的提问来源于stack exchange,提问作者Caulinez




