Python header unicode 到 dict

标签 python mysql django dictionary unicode

我有一个 MySQL 数据库,其中一个列中保存了一个 python 请求 header ,它看起来像这样:

{
 '_': '/Users/user/.virtualenvs/squadraft/bin/python',
 'wsgi.multiprocess': False, 'RUN_MAIN': 'true',
 'rvm_version': '1.26.11 (latest)',
 'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8,fr;q=0.6',
 'PIP_RESPECT_VIRTUALENV': 'true',
 'SERVER_SOFTWARE': 'WSGIServer/0.1 Python/2.7.5',
 'rvm_path': '/Users/user/.rvm',
 'TERM_PROGRAM_VERSION': '326',
 'RUBY_VERSION': 'ruby-2.0.0-p643',
 'REQUEST_METHOD': 'POST',
 'LOGNAME': 'user',
 'USER': 'user',
 'HTTP_ORIGIN': 'chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop',
 'PATH': '/Users/user/.virtualenvs/squadraft/bin:/Users/user/.rvm/gems/ruby-2.0.0-p643/bin:/Users/user/.rvm/gems/ruby-2.0.0-p643@global/bin:/Users/user/.rvm/rubies/ruby-2.0.0-p643/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin:/Users/user/.rvm/bin:/Users/user/.rvm/bin',
 'QUERY_STRING': '',
 'HOME': '/Users/user',
 'VIRTUALENVWRAPPER_SCRIPT': '/usr/local/bin/virtualenvwrapper.sh',
 'HTTP_CONNECTION': 'keep-alive',
 'TERM_PROGRAM': 'Apple_Terminal',
 'LANG': 'en_US.UTF-8',
 'TERM': 'xterm-256color',
 'SHELL': '/bin/bash',
 'TZ': 'UTC',
 'SERVER_NAME': '1.0.0.127.in-addr.arpa',
 'VERSIONER_PYTHON_VERSION': '2.7',
 'SHLVL': '1',
 '_system_name': 'OSX',
 'wsgi.url_scheme': 'http',
 'VIRTUALENVWRAPPER_VIRTUALENV_ARGS': '--no-site-packages',
 'SERVER_PORT': '8000',
 'CONTENT_LENGTH': '38414',
 'SERVER_PROTOCOL': 'HTTP/1.1',
 '_system_arch': 'x86_64',
 'GEM_PATH': '/Users/user/.rvm/gems/ruby-2.0.0-p643:/Users/user/.rvm/gems/ruby-2.0.0-p643@global',
 'rvm_bin_path': '/Users/user/.rvm/bin',
 'WORKON_HOME': '/Users/user/.virtualenvs',
 'TERM_SESSION_ID': '8CFC3FA5-6F56-49B7-AFAB-A807AFFA1D83',
 'VERSIONER_PYTHON_PREFER_32_BIT': 'no',
 'CONTENT_TYPE': 'application/xml',
 'rvm_prefix': '/Users/user',
 'HTTP_POSTMAN_TOKEN': 'c084799e-820d-7f70-4b7e-7597f1abab6f',
 'Apple_PubSub_Socket_Render': '/tmp/launch-g9J1iQ/Render',
 'SSH_AUTH_SOCK': '/tmp/launch-JlZPBH/Listeners',
 'VIRTUAL_ENV': '/Users/user/.virtualenvs/squadraft',
 'LC_CTYPE': 'UTF-8',
 'IRBRC': '/Users/user/.rvm/rubies/ruby-2.0.0-p643/.irbrc',
 'MY_RUBY_HOME': '/Users/user/.rvm/rubies/ruby-2.0.0-p643',
 'HTTP_CACHE_CONTROL': 'no-cache',
 'VIRTUALENVWRAPPER_WORKON_CD': '1',
 'PS1': '(squadraft) \h:\W \u\$ ',
 'SCRIPT_NAME': u'',
 'wsgi.multithread': True, 'LC_ALL': 'en_US.UTF-8',
 '_system_type': 'Darwin',
 'TMPDIR': '/var/folders/5c/vhcdkw8n6xz2n_ywlkvt2q_r0000gn/T/',
 'HTTP_ACCEPT': '*/*',
 'VIRTUALENVWRAPPER_PROJECT_FILENAME': '.project',
 'wsgi.version': (1, 0), 'VIRTUALENVWRAPPER_HOOK_DIR': '/Users/user/.virtualenvs',
 'GATEWAY_INTERFACE': 'CGI/1.1',
 'wsgi.run_once': False, 'REMOTE_HOST': '',
 'OLDPWD': '/Users/user/Development/rotas',
 'REMOTE_ADDR': '127.0.0.1',
 'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',
 'wsgi.input': <socket._fileobject object at 0x112519cd0>, 
 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x10f4891e0>, 
 'HTTP_ACCEPT_ENCODING': 'gzip, deflate',
 '__CF_USER_TEXT_ENCODING': '0x1F5:0:0',
 'PWD': '/Users/user/Development/squadraft',
 'PIP_VIRTUALENV_BASE': '/Users/user/.virtualenvs',
 'DJANGO_SETTINGS_MODULE': 'fantasysport.settings.local',
 '_system_version': '10.9',
 'HTTP_HOST': '127.0.0.1:8000',
 'wsgi.file_wrapper': <class wsgiref.util.FileWrapper at 0x110994258>,
 '__CHECKFIX1436934': '1',
 'GEM_HOME': '/Users/user/.rvm/gems/ruby-2.0.0-p643',
 'PATH_INFO': u'/client/collect-data/'
}

注意通过我的模型查询访问它,我将它作为 Unicode 获取。我想将其转换为字典,以便我可以访问底层属性。

以下是我迄今为止尝试过的一些方法。

import json
json.loads(header_data)
# This fails with a 'ValueError: Expecting property name 
# enclosed in double quotes: line 1 column 2 (char 1)'

# Also
import ast
ast.literal_eval(header_data)
# The above fails with a 'File "<unknown>", line 1' error

更多信息:

print(type(header_data))
<type 'unicode'>

print(header_data)
{'_': '/Users/user/.virtualenvs/squadraft/bin/python', 'wsgi.multiprocess': False, 'RUN_MAIN': 'true', 'rvm_version': '1.26.11 (latest)', 'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8,fr;q=0.6', 'PIP_RESPECT_VIRTUALENV': 'true', 'SERVER_SOFTWARE': 'WSGIServer/0.1 Python/2.7.5', 'rvm_path': '/Users/user/.rvm', 'TERM_PROGRAM_VERSION': '326', 'RUBY_VERSION': 'ruby-2.0.0-p643', 'REQUEST_METHOD': 'POST', 'LOGNAME': 'user', 'USER': 'user', 'HTTP_ORIGIN': 'chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop', 'PATH': '/Users/user/.virtualenvs/squadraft/bin:/Users/user/.rvm/gems/ruby-2.0.0-p643/bin:/Users/user/.rvm/gems/ruby-2.0.0-p643@global/bin:/Users/user/.rvm/rubies/ruby-2.0.0-p643/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin:/Users/user/.rvm/bin:/Users/user/.rvm/bin', 'QUERY_STRING': '', 'HOME': '/Users/user', 'VIRTUALENVWRAPPER_SCRIPT': '/usr/local/bin/virtualenvwrapper.sh', 'HTTP_CONNECTION': 'keep-alive', 'TERM_PROGRAM': 'Apple_Terminal', 'LANG': 'en_US.UTF-8', 'TERM': 'xterm-256color', 'SHELL': '/bin/bash', 'TZ': 'UTC', 'SERVER_NAME': '1.0.0.127.in-addr.arpa', 'VERSIONER_PYTHON_VERSION': '2.7', 'SHLVL': '1', '_system_name': 'OSX', 'wsgi.url_scheme': 'http', 'VIRTUALENVWRAPPER_VIRTUALENV_ARGS': '--no-site-packages', 'SERVER_PORT': '8000', 'CONTENT_LENGTH': '38414', 'SERVER_PROTOCOL': 'HTTP/1.1', '_system_arch': 'x86_64', 'GEM_PATH': '/Users/user/.rvm/gems/ruby-2.0.0-p643:/Users/user/.rvm/gems/ruby-2.0.0-p643@global', 'rvm_bin_path': '/Users/user/.rvm/bin', 'WORKON_HOME': '/Users/user/.virtualenvs', 'TERM_SESSION_ID': '8CFC3FA5-6F56-49B7-AFAB-A807AFFA1D83', 'VERSIONER_PYTHON_PREFER_32_BIT': 'no', 'CONTENT_TYPE': 'application/xml', 'rvm_prefix': '/Users/user', 'HTTP_POSTMAN_TOKEN': 'c084799e-820d-7f70-4b7e-7597f1abab6f', 'Apple_PubSub_Socket_Render': '/tmp/launch-g9J1iQ/Render', 'SSH_AUTH_SOCK': '/tmp/launch-JlZPBH/Listeners', 'VIRTUAL_ENV': '/Users/user/.virtualenvs/squadraft', 'LC_CTYPE': 'UTF-8', 'IRBRC': '/Users/user/.rvm/rubies/ruby-2.0.0-p643/.irbrc', 'MY_RUBY_HOME': '/Users/user/.rvm/rubies/ruby-2.0.0-p643', 'HTTP_CACHE_CONTROL': 'no-cache', 'VIRTUALENVWRAPPER_WORKON_CD': '1', 'PS1': '(squadraft) \h:\W \u\$ ', 'SCRIPT_NAME': u'', 'wsgi.multithread': True, 'LC_ALL': 'en_US.UTF-8', '_system_type': 'Darwin', 'TMPDIR': '/var/folders/5c/vhcdkw8n6xz2n_ywlkvt2q_r0000gn/T/', 'HTTP_ACCEPT': '*/*', 'VIRTUALENVWRAPPER_PROJECT_FILENAME': '.project', 'wsgi.version': (1, 0), 'VIRTUALENVWRAPPER_HOOK_DIR': '/Users/user/.virtualenvs', 'GATEWAY_INTERFACE': 'CGI/1.1', 'wsgi.run_once': False, 'REMOTE_HOST': '', 'OLDPWD': '/Users/user/Development/rotas', 'REMOTE_ADDR': '127.0.0.1', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36', 'wsgi.input': <socket._fileobject object at 0x112519cd0>, 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x10f4891e0>, 'HTTP_ACCEPT_ENCODING': 'gzip, deflate', '__CF_USER_TEXT_ENCODING': '0x1F5:0:0', 'PWD': '/Users/user/Development/squadraft', 'PIP_VIRTUALENV_BASE': '/Users/user/.virtualenvs', 'DJANGO_SETTINGS_MODULE': 'fantasysport.settings.local', '_system_version': '10.9', 'HTTP_HOST': '127.0.0.1:8000', 'wsgi.file_wrapper': <class wsgiref.util.FileWrapper at 0x110994258>, '__CHECKFIX1436934': '1', 'GEM_HOME': '/Users/user/.rvm/gems/ruby-2.0.0-p643', 'PATH_INFO': u'/opta/collect-data/'}

最佳答案

正如已在已删除的答案中指出的那样,您的问题是条目

'wsgi.input': <socket._fileobject object at 0x112519cd0>
'wsgi.errors': <open file '<stderr>', mode 'w' at 0x10f4891e0>
'wsgi.file_wrapper': <class wsgiref.util.FileWrapper at 0x110994258>

删除这些和

ast.literal_eval(header_data)

应该可以。

关于Python header unicode 到 dict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35716640/

相关文章:

python - Django mysql 表名未验证

django - 将 compass 添加到Django项目的最佳方法

javascript - 如何通过匹配 BeautifulSoup 中 href 属性中的文本来获取元素

c++ - Python 异常 : index out of range while debuging the code c++ with support for STL with gdb

python - 如何在 numpy 数组中找到最大非无穷大值的索引?

php - 使用 Laravel 进行搜索

python - H2O 变量对于模型中包含的所有离散级别的重要性

mysql - 将mysql数据导出到csv文件

php - 使用 php vpn 连接到 mysql

python - Django 使用字段值查找过滤查询集