我花了几个小时的时间来寻找Unicode字符串的问题,这些字符串被分解为Python(2.7)隐藏的东西,我仍然不明白.首先,我尝试u".."在我的代码中使用一致的字符串,但这导致臭名昭着UnicodeEncodeError.我尝试过使用.encode('utf8'),但这也无济于事.最后,事实证明我不应该使用任何一个,它都可以自动完成.然而,我(这里我需要赞扬一位帮助过我的朋友)确实注意到一些奇怪的事情,同时我的头靠在墙上.sys.getdefaultencoding()返回ascii,同时sys.stdout.encoding返回UTF-8.1.在下面的代码中工作正常,没有任何修改sys和2.提出一个UnicodeEncodeError.如果我更改默认的系统编码 reload(sys).setdefaultencoding("utf8"),那么2.工作正常.我的问题是为什么两个编码变量首先是不同的,如何在这段简单的代码中设法使用错误的编码?请不要把我发送到Unicode HOWTO,我已经在很多问题中看到了这一点UnicodeEncodeError.
# -*- coding: utf-8 -*-
import sys
class Token:
def __init__(self, string, final=False):
self.value = string
self.final = final
def __str__(self):
return self.value
def __repr__(self):
return self.value
print(sys.getdefaultencoding())
print(sys.stdout.encoding)
# 1.
myString = "I need 20 000€."
tok = Token(myString)
print(tok)
reload(sys).setdefaultencoding("utf8")
# 2.
myString = u"I need 20 000€."
tok = Token(myString)
print(tok)
Run Code Online (Sandbox Code Playgroud) 我已多次阅读有关cache-as-ram模式(无填充模式)的信息,并且想知道是否可以编写第一个可执行代码并跳转到可执行代码,如果是这样,可执行代码仅限于一级缓存的一半(从那以后)缓存真的只是sram).
我用Python编写了一些库,用于我的项目.我已将它们本地存储在我的系统上,也远程存储在Github上.现在,每当我编写一些代码时,我会sys.path.append()在开始时使用 它来帮助从我的系统目录中导入我的库.我想知道如果有任何方法直接从我的Github存储库导入这些文件
我的回购链接就是这个 - Quacpy
Jupyter == 4.1.0,Python == 2.7.10,IPython == 4.2.0
我正在为我的Jupyter笔记本编写一个SQL UI,并希望结合多线程,以便我可以在一个单元格中运行查询,并在查询运行时继续在其他单元格中工作.
我遇到的问题是,如果我在一个单元格中执行查询,输出将显示在最后执行的单元格的输出提示中,而不是在执行查询的单元格的输出提示中.
我仔细检查了网络,发现了这个聪明的伎俩,但我认为它已经过时了和/或在我的Jupyter版本中不再适用.当我运行它时,我只获得上次执行的任何单元格的输出.因此,如果我同时运行两者,我只获得最后执行的输出,而不是输出打印以同时分离单元格.
所以我有我的上下文管理器设置parent_header:
import sys
import threading
from contextlib import contextmanager
# we need a lock, so that other threads don't snatch control
# while we have set a temporary parent
stdout_lock = threading.Lock()
@contextmanager
def set_stdout_parent(parent):
"""a context manager for setting a particular parent for sys.stdout
the parent determines the destination cell of output
"""
save_parent = sys.stdout.parent_header
with stdout_lock:
sys.stdout.parent_header = parent
try:
yield
finally: …Run Code Online (Sandbox Code Playgroud) 我正在创建一个脚本,要求我将编码格式更改为"UTF-8".我在Stachoverflow上找到了一个主题,说我可以使用:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
Run Code Online (Sandbox Code Playgroud)
它在OSX 10.8(也许是早期版本)中运行良好,但在Windows XP和Windows 7(可能是Vista和8)中它会禁用解释器中的所有反馈.脚本仍在运行,但我无法打印任何内容或查看是否有任何问题.
有没有办法修补当前代码或是否有另一种方法来更改编码?
我通常使用IPython,并且最近才注意到常规python shell中导入的搜索路径是错误的.根据我的理解,sys.path继承自PYTHONPATH(虽然我不知道PYTHONPATH住在哪里),这在IPython中是不同的?我担心这个有影响的装置.比如我刚尝试过
pip install --upgrade gensim
Run Code Online (Sandbox Code Playgroud)
失败,因为它无法解决我已经安装的scipy依赖项.所以我在Ipython中找到了更深入的鸽子
import gensim
gensim.__version__
Run Code Online (Sandbox Code Playgroud)
在python中返回.9.1
import gensim
gensim.__version__
Run Code Online (Sandbox Code Playgroud)
返回.8.9
以下是Ipython版本的sys.path的样子:
['',
'/Users/change/anaconda/bin',
'/Users/change/anaconda/lib/python2.7/site-packages/pybing-0.12-py2.7.egg',
'/Users/change/anaconda/lib/python2.7/site-packages/httplib2-0.8-py2.7.egg',
'/Users/change/anaconda/python.app/Contents/lib/python27.zip',
'/Users/change/anaconda/python.app/Contents/lib/python2.7',
'/Users/change/anaconda/python.app/Contents/lib/python2.7/plat-darwin',
'/Users/change/anaconda/python.app/Contents/lib/python2.7/plat-mac',
'/Users/change/anaconda/python.app/Contents/lib/python2.7/plat-mac/lib-scriptpackages',
'/Users/change/anaconda/python.app/Contents/lib/python2.7/lib-tk',
'/Users/change/anaconda/python.app/Contents/lib/python2.7/lib-old',
'/Users/change/anaconda/python.app/Contents/lib/python2.7/lib-dynload',
'/Users/change/anaconda/lib/python2.7/site-packages',
'/Users/change/anaconda/lib/python2.7/site-packages/PIL',
'/Users/change/anaconda/lib/python2.7/site-packages/pygoogle',
'/Users/change/anaconda/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info',
'/Users/change/anaconda/lib/python2.7/site-packages/IPython/extensions']
Run Code Online (Sandbox Code Playgroud)
和常规的python脚本sys.path:
['',
'/Users/change/anaconda/lib/python2.7/site-packages/pybing-0.12-py2.7.egg',
'/Users/change/anaconda/lib/python2.7/site-packages/httplib2-0.8-py2.7.egg',
'/Users/change/anaconda/lib/python27.zip',
'/Users/change/anaconda/lib/python2.7',
'/Users/change/anaconda/lib/python2.7/plat-darwin',
'/Users/change/anaconda/lib/python2.7/plat-mac',
'/Users/change/anaconda/lib/python2.7/plat-mac/lib-scriptpackages',
'/Users/change/anaconda/lib/python2.7/lib-tk',
'/Users/change/anaconda/lib/python2.7/lib-old',
'/Users/change/anaconda/lib/python2.7/lib-dynload',
'/Users/change/anaconda/lib/python2.7/site-packages',
'/Users/change/anaconda/lib/python2.7/site-packages/PIL',
'/Users/change/anaconda/lib/python2.7/site-packages/pygoogle',
'/Users/change/anaconda/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info']
Run Code Online (Sandbox Code Playgroud) 我是python的新手并在线尝试一些编码问题.我接受sys.sdnin很多接受输入.我想知道如何input()和sys.stdin在行动不同?
有我的桌面上两个目录,DIR1并且DIR2包含下列文件:
DIR1:
file1.py
DIR2:
file2.py myfile.txt
Run Code Online (Sandbox Code Playgroud)
这些文件包含以下内容:
import sys
sys.path.append('.')
sys.path.append('../DIR2')
import file2
Run Code Online (Sandbox Code Playgroud)
import sys
sys.path.append( '.' )
sys.path.append( '../DIR2' )
MY_FILE = "myfile.txt"
myfile = open(MY_FILE)
Run Code Online (Sandbox Code Playgroud)
some text
Run Code Online (Sandbox Code Playgroud)
现在,有两种情况.第一个工作,第二个给出错误.
我cd进入DIR2并运行file2.py它运行没有问题.
我cd进入DIR1并运行file1.py它会抛出一个错误:
Traceback (most recent call last):
File "<absolute-path>/DIR1/file1.py", line 6, in <module>
import file2
File "../DIR2/file2.py", line 9, in <module>
myfile = open(MY_FILE)
IOError: [Errno 2] No such …Run Code Online (Sandbox Code Playgroud) sys.stdout.write()当我注意到这会产生一些奇怪的输出时,我只是在Python控制台中玩.
对于每次write()调用,分别写入传递给函数的字符数将附加到控制台的输出中.
>>> sys.stdout.write('foo bar')
例如,foo bar7打印出来的结果
.
即使传递空字符串也会产生输出0.
这实际上只发生在Python控制台中,但在执行具有相同语句的文件时却不会发生.更有趣的是,它只适用于Python 3,但不适用于Python 2.
虽然这对我来说不是一个问题,因为它只发生在控制台中,但我真的很想知道为什么它会像这样.
我的Python版本在Ubuntu 15.10下是3.5.1.
我知道如何检查命令行上是否给出了所需的参数。但是,如何检查命令行上给定的参数是否实际上引用了我正在运行代码的文件夹中的现有文件?
我正在尝试合并此验证,以便通过跳过部分代码来节省时间,以防无法引用文件。