从文本文件读取信息并将读取行传递给urlencode python函数

从文本文件读取信息并将读取行传递给urlencode python函数,python,Python,我正在尝试将urlencode()数据发送到我的web服务器。 urlencode()函数使用的数据是从本地计算机上的文本文件中读取的。 当我从.py脚本读取urlencode()函数的输入数据时,没有抛出任何错误。 但是,如果urlencode()函数的输入数据来自本地输入文本文件,则会出现以下错误: 回溯(最近一次呼叫最后一次): 文件“active\u directory\u ssl\u test.py”,第30行,在 params=urllib.urlencode(dict(LINE))

我正在尝试将urlencode()数据发送到我的web服务器。 urlencode()函数使用的数据是从本地计算机上的文本文件中读取的。 当我从.py脚本读取urlencode()函数的输入数据时,没有抛出任何错误。 但是,如果urlencode()函数的输入数据来自本地输入文本文件,则会出现以下错误:

回溯(最近一次呼叫最后一次): 文件“active\u directory\u ssl\u test.py”,第30行,在 params=urllib.urlencode(dict(LINE)) ValueError:字典更新序列元素#0的长度为1;2是必需的

我正在做以下工作:

FILE=open(IN_FILE, 'r')
LINE = FILE.readline()
while LINE:
    print LINE
    LINE = FILE.readline()
    params = urllib.urlencode(dict(LINE))
    try:
        f_handler = urlopen('https://host_name/path_name/file_name', params)
为什么从文本文件读取数据时会出现差异或错误。在这两种情况下,变量都用作urlencode()函数的参数

这是输入文本文件的内容:

{'hostname' : 'host.1.com', 'port' : '389', 'basedn' : 'CN=Users,DC=prem,DC=local', 'username' : 'CN=Administrator,CN=Users,DC=onprem,DC=local', 'password' : 'passwd', 'roupname' : 'CN=Group,CN=Users,DC=onprem,DC=local', 'attribute' : 'name', 'enabled' : 'sync', 'impsync' : 'sync', 'enabled' : 'enabled', 'username' : 'user@1.com', 'password' : 'passwd', 'update' ; 'update'}

我会继续发表我的评论作为答案,因为这就是答案。您正在对字符串调用
dict()
dict()
函数需要两种输入类型之一。A.形成
(键,值)
对的元组列表,或B.以
key=value
形式出现的关键字参数。这两个你都不能通过

--评论的额外细节--

>>输入={'key1':'value1','key2':'value2'}
>>>类型(输入)
>>>dict(输入)
{'key2':'value2','key1':'value1'}
>>>input=“{'key1':'value1','key2':'value2'}”#这是您的第二个表单。
>>>类型(输入)
>>>dict(输入)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:字典更新序列元素#0的长度为1;2是必需的

另外,无论如何,在您的第一个示例中,调用
dict()
是多余的。您已经有了一本使用文字语法声明的词典。

我将继续并将我的评论作为答案发布,因为它就是答案。您正在对字符串调用
dict()
dict()
函数需要两种输入类型之一。A.形成
(键,值)
对的元组列表,或B.以
key=value
形式出现的关键字参数。这两个你都不能通过

--评论的额外细节--

>>输入={'key1':'value1','key2':'value2'}
>>>类型(输入)
>>>dict(输入)
{'key2':'value2','key1':'value1'}
>>>input=“{'key1':'value1','key2':'value2'}”#这是您的第二个表单。
>>>类型(输入)
>>>dict(输入)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:字典更新序列元素#0的长度为1;2是必需的

另外,无论如何,在您的第一个示例中,调用
dict()
是多余的。您已经有了一个使用文字语法声明的字典。

Hi,那么为什么urlencode()函数是这样工作的:input={'val1':'value1','val2':'value2'}params=urllib.urlencode(dict(input))我也只向urlencode()函数传递一个字符串,它工作正常。在这种情况下,输入列在.py中script@roland-当.py文件中有
{'hostname':'host.1.com'}
时,它是字典的文字声明。从文件中读取一行时,将其作为字符串读取,这在功能上相当于
“{'hostname':'host.1.com'}”
。这两个问题截然不同。@roland-你只接受了25%的问题的答案(点击复选标记)。虽然100%不是必需的,但你应该努力指出你的问题何时得到了回答。请参阅这篇常见问题解答文章:谢谢你宝贵的回答,那么为什么urlencode()函数会这样工作:input={'val1':'value1','val2':'value2'}params=urllib.urlencode(dict(input))我也只向urlencode()函数传递一个字符串,它工作正常。在这种情况下,输入列在.py中script@roland-当.py文件中有
{'hostname':'host.1.com'}
时,它是字典的文字声明。从文件中读取一行时,将其作为字符串读取,这在功能上相当于
“{'hostname':'host.1.com'}”
。这两个问题截然不同。@roland-你只接受了25%的问题的答案(点击复选标记)。虽然100%不是必需的,但你应该努力指出你的问题何时得到了回答。请参阅这篇常见问题解答文章:感谢您宝贵的回答
>>> input = {'key1': 'value1', 'key2': 'value2'}
>>> type(input)
<type 'dict'>
>>> dict(input)
{'key2': 'value2', 'key1': 'value1'}
>>> input = "{'key1': 'value1', 'key2': 'value2'}" # This is your 2nd form.
>>> type(input)
<type 'str'>
>>> dict(input)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: dictionary update sequence element #0 has length 1; 2 is required