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

1 投票
1 回答
1159 浏览
提问于 2025-04-17 01:57

我正在尝试将 urlencode() 处理的数据发送到我的网络服务器。这个 urlencode() 函数用的数据是从我本地机器上的一个文本文件中读取的。当我从 .py 脚本中读取 urlencode() 函数的输入数据时,没有出现错误。但是,如果输入数据是来自本地的文本文件,我就会遇到以下错误:

错误追踪(最近的调用在前): 文件 "active_directory_ssl_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'}

1 个回答

1

我来把我的评论当作答案发出来,因为这就是答案。你在对一个字符串使用 dict() 函数。这个 dict() 函数需要两种类型的输入之一。要么是 A. 一组元组,形成 (key, value) 的对,要么是 B. 以 key = value 形式的关键字参数。你没有传递这两种中的任何一种。

-- 额外的细节供评论参考 --

>>> 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

另外,值得一提的是,在你的第一个例子中,调用 dict() 是多余的。你已经有一个用字面量语法声明的字典了。

撰写回答