当我们使用时,我们的代码需要10分钟来虹吸68,000条记录:
new_file = new_file + line + string
Run Code Online (Sandbox Code Playgroud)
但是,当我们执行以下操作时,只需1秒钟:
new_file += line + string
Run Code Online (Sandbox Code Playgroud)
这是代码:
for line in content:
import time
import cmdbre
fname = "STAGE050.csv"
regions = cmdbre.regions
start_time = time.time()
with open(fname) as f:
content = f.readlines()
new_file_content = ""
new_file = open("CMDB_STAGE060.csv", "w")
row_region = ""
i = 0
for line in content:
if (i==0):
new_file_content = line.strip() + "~region" + "\n"
else:
country = line.split("~")[13]
try:
row_region = regions[country]
except KeyError:
row_region = "Undetermined"
new_file_content += …Run Code Online (Sandbox Code Playgroud) 由于Python中的变量是其循环和外访问try- except块,我天真地以为下面这个代码片段会工作得很好,因为e是访问:
try:
int('s')
except ValueError as e:
pass
print(e)
Run Code Online (Sandbox Code Playgroud)
在Python 2(2.7测试)中,它确实按预期工作,输出为:
invalid literal for int() with base 10: 's'
Run Code Online (Sandbox Code Playgroud)
但是,在Python 3中,我很惊讶输出是:
NameError: name 'e' is not defined
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
我正在尝试用注释掉的一行编写一些Python示例代码:
user_by_email = session.query(User)\
.filter(Address.email=='one')\
#.options(joinedload(User.addresses))\
.first()
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
user_by_email = session.query(User)\
.filter(Address.email=='one')\
# .options(joinedload(User.addresses))\
.first()
Run Code Online (Sandbox Code Playgroud)
但我得到IndentationError:意外的缩进.如果我删除注释掉的行,代码就可以了.我很确定我只使用空格(Notepad ++ screenshot):
我想测试 python 3 coro 是否因特定异常而失败,但似乎没有实现此功能。
async with self.assertRaises(TestExceptionType):
await my_func()
Run Code Online (Sandbox Code Playgroud)
因为单元测试像这样失败:
...
File "/Users/...../tests.py", line 144, in go
async with self.assertRaises(TestExceptionType):
AttributeError: __aexit__
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:这应该有效吗?如果没有,断言失败的异步功能的最佳方法是什么?
为什么Python eval不能在函数内部工作?相同的eval(compile(cmd))代码在全局环境中工作,但在foo函数内部不起作用.
简单的例子:
fn = '/tmp/tmp'
mode = 'single'
def foo(cmd, fn, mode):
eval(compile(cmd, fn, mode)) # <<< this does not work
print 'foo: cmd=', cmd
print 'foo: x=', x
cmd = "x = 1"
eval(compile(cmd, fn, mode)) # <<< this works
print 'global scope: cmd=', cmd
print 'global scope: x=', x
del(x)
foo('x = 9', fn, mode)
Run Code Online (Sandbox Code Playgroud)
这是输出和错误消息:
global scope: cmd= x = 1
global scope: x= 1
foo: cmd= x = 9
foo: …Run Code Online (Sandbox Code Playgroud) 我无法弄清楚为什么在Python 2.7中解析这个文件要比在Python 3.6中解析这么快.我在macOS和Arch-Linux上都独立发现了这种模式.其他人可以复制它吗?任何解释?
警告:代码段写入~2GB文件
时序:
$ python2 test.py
5.01580309868
$ python3 test.py
10.664075019994925
Run Code Online (Sandbox Code Playgroud)
代码test.py:
import os
SEQ_LINE = 'ATCGN'* 80 + '\n'
if not os.path.isfile('many_medium.fa'):
with open('many_medium.fa', 'w') as out_f:
for i in range(1000000):
out_f.write('>{}\n'.format(i))
for _ in range(5):
out_f.write(SEQ_LINE)
from timeit import timeit
def f():
with open('many_medium.fa') as f:
for line in f:
pass
print(timeit('f()', setup='from __main__ import f', number=5))
Run Code Online (Sandbox Code Playgroud) 我以为Python交互模式下的显示总是等效的print(repr()),但事实并非如此None。这是语言功能还是我缺少什么?谢谢
>>> None
>>> print(repr(None))
None
>>>
Run Code Online (Sandbox Code Playgroud) 我有一个文件中的id列表和一个数据文件(大小约为3.2Gb),我想提取数据文件中包含id和下一行的行.我做了以下事情:
grep -A1 -Ff file.ids file.data | grep -v "^-" > output.data
Run Code Online (Sandbox Code Playgroud)
这有效,但也提取了不需要的子串,例如,如果id EA4也被拉出线EA40.
所以我尝试使用相同的命令,但将-w(--word-regexp)标志添加到第一个grep以匹配整个单词.但是,我发现我的命令现在运行了> 1小时(而不是~26秒),并且还开始使用10千兆字节的内存,所以我不得不杀死这份工作.
为什么添加-w使命令如此缓慢和内存占用?如何有效地运行此命令以获得所需的输出?谢谢
file.ids 看起来像这样:
>EA4
>EA9
Run Code Online (Sandbox Code Playgroud)
file.data 看起来像这样:
>EA4 text
data
>E40 blah
more_data
>EA9 text_again
data_here
Run Code Online (Sandbox Code Playgroud)
output.data 看起来像这样:
>EA4 text
data
>EA9 text_again
data_here
Run Code Online (Sandbox Code Playgroud) listPython中的A 现在实现为动态指针数组,因此它不适合在前端插入和删除.但是,环形缓冲区也支持O(1)索引.它也可以像动态数组一样扩展和收缩,以支持两端的O(1)摊销插入和删除.为什么CPython没有选择这个实现,或者它的主要缺点是什么?
python language-design list data-structures python-internals
有没有之间的任何实际的差别list(iterable),并[*iterable]在支持后者的Python版本?