我用google搜索并在SO上搜索这些缓冲模块之间的区别.但是,我仍然不太了解,我认为我读到的一些帖子已经过时了.
在Python 2.7.11中,我使用了下载了特定格式的二进制文件r = requests.get(url).然后我通过StringIO.StringIO(r.content),cStringIO.StringIO(r.content)并io.BytesIO(r.content)设计用于解析内容的功能.
所有这三种方法都可用.我的意思是,即使文件是二进制文件,它仍然可以使用StringIO.为什么?
另一件事是他们的效率.
In [1]: import StringIO, cStringIO, io
In [2]: from numpy import random
In [3]: x = random.random(1000000)
In [4]: %timeit y = cStringIO.StringIO(x)
1000000 loops, best of 3: 736 ns per loop
In [5]: %timeit y = StringIO.StringIO(x)
1000 loops, best of 3: 283 µs per loop
In [6]: %timeit y = io.BytesIO(x)
1000 loops, best of 3: 1.26 ms per loop
Run Code Online (Sandbox Code Playgroud)
如上图所示 …
是否可以指定(可编辑的)源依赖关系setup.py已知驻留在本地文件系统上?
请考虑以下目录结构,所有目录结构都位于单个VCS存储库中:
projects
utils
setup.py
...
app1
setup.py
... # app1 files depend on ../utils
app2
setup.py
... # app2 files depend on ../utils
Run Code Online (Sandbox Code Playgroud)
给出以下命令:
cd projects
mkvirtualenv app1
pip install -e app1
Run Code Online (Sandbox Code Playgroud)
我想安装app1的所有依赖项,包括"utils",这是一个"可编辑"的依赖项.同样,如果我为app2做了同样的事情.
我已经试过所有不同组合打file://...的网址,install_requires并dependency_links无济于事.我想使用依赖链接URL src+file://../utils,这会告诉setuptools包的源是在这个相对路径的文件系统上.有没有办法做到这一点?
最近,我在用Python开发GUI应用程序时一直在试验TDD.我发现让测试验证我的代码的功能非常令人放心,但遵循TDD的一些推荐做法却很棘手.也就是说,首先编写测试很难.而且我发现很难让我的测试可读(由于大量使用模拟库).
我选择了一个名为mocker的模拟库.我使用它很多,因为我正在测试的大部分代码调用(a)我的应用程序中依赖于系统状态的其他方法或(b)没有事件循环时不能存在的ObjC/Cocoa对象等.
无论如何,我有很多看起来像这样的测试:
def test_current_window_controller():
def test(config):
ac = AppController()
m = Mocker()
ac.iter_window_controllers = iwc = m.replace(ac.iter_window_controllers)
expect(iwc()).result(iter(config))
with m:
result = ac.current_window_controller()
assert result == (config[0] if config else None)
yield test, []
yield test, [0]
yield test, [1, 0]
Run Code Online (Sandbox Code Playgroud)
请注意,这实际上是三个测试; 都使用相同的参数化测试功能.这是正在测试的代码:
def current_window_controller(self):
try:
# iter_window_controllers() iterates in z-order starting
# with the controller of the top-most window
# assumption: the top-most window is the "current" one
wc = self.iter_window_controllers().next()
except StopIteration:
return None
return …Run Code Online (Sandbox Code Playgroud) 当mount命令失败时,我想找出网络共享的安装位置,如下所示:
$ mkdir ~/share
$ mount_afp afp://server/share ~/share
mount_afp: the volume is already mounted
Run Code Online (Sandbox Code Playgroud)
看起来很有希望......
$ mount
... snip ...
afp_000000004oMw0q76003DF78u-1.2d000006 on /Volumes/share-1 (afpfs, nodev, nosuid, mounted by username)
afp_000000004oMw0q76003DF78u-2.2d000007 on /Volumes/share-2 (afpfs, nodev, nosuid, mounted by username)
Run Code Online (Sandbox Code Playgroud)
似乎应该有一种方法将这些长afp_000...数字映射到URI ...有没有办法确定卷的位置,因为它的afp:// URI?
我实际上是用Python的子进程模块执行这些命令,所以如果有一个模块或库可以做到这一点也是可以接受的.
我正在开发一个应用程序,我在其中迭代表中的许多(1,000,000+)行,同时插入新行并沿途更新现有行.要求select语句产生表中的每一行(最初执行select时存在的那一行)恰好一次,并且永远不会产生在执行select之后插入的行.我宁愿不将所有行加载到内存中(这需要很长时间和大量RAM - 我尝试过).
我已经开发了一个小的Python示例,它演示了SQLite显然不会从长时间运行的选择中隔离插入(并且可能是更新和删除).我无法在SQLite文档中找到任何特别提到这种行为的地方,但是我发现了一些链接,这些链接暗示了插入失败的事实(可能在早期版本的SQLite中?),这在我的例子中没有.
import sqlite3
def select_affected_by_insert():
# select from and simultaneously modify same table
cn = sqlite3.connect(':memory:')
cn.execute("CREATE TABLE demo (v INTEGER PRIMARY KEY)")
n = 5
values = [[v] for v in range(n)]
cn.executemany('INSERT INTO demo VALUES (?)', values)
for (v,) in cn.execute('SELECT v FROM demo'):
with cn:
# insert in transaction
cn.execute('INSERT INTO demo VALUES (?)', [n + v])
print v, n + v
assert v < n, 'got more rows than expected!'
if __name__ == …Run Code Online (Sandbox Code Playgroud) python ×4
bytesio ×1
cstringio ×1
distribute ×1
insert ×1
isolation ×1
macos ×1
mount ×1
networking ×1
packaging ×1
select ×1
setuptools ×1
sqlite ×1
stringio ×1
tdd ×1
unit-testing ×1
uri ×1