小编Chr*_*nds的帖子

为什么'new_file + = line + string'比'new_file = new_file + line + string'快得多?

当我们使用时,我们的代码需要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 string cpython string-concatenation python-internals

8
推荐指数
2
解决办法
1108
查看次数

Python 2和3中捕获的异常实例的范围

由于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 scope exception python-2.7 python-3.x

8
推荐指数
1
解决办法
308
查看次数

IndentationError:评论后意外缩进

我正在尝试用注释掉的一行编写一些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 indentation python-2.7

8
推荐指数
1
解决办法
1114
查看次数

您可以使用 self.assertRaises 作为异步上下文管理器吗?

我想测试 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 unit-testing python-3.x python-asyncio

7
推荐指数
1
解决办法
1357
查看次数

Python eval在函数内部不起作用

为什么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 eval function global-variables exec

7
推荐指数
1
解决办法
1090
查看次数

为什么在Python 2和Python 3中打开和迭代文件句柄的速度是原来的两倍?

我无法弄清楚为什么在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 parsing file python-2.7 python-3.x

7
推荐指数
2
解决办法
270
查看次数

在Python交互模式下未显示“无”

我以为Python交互模式下的显示总是等效的print(repr()),但事实并非如此None。这是语言功能还是我缺少什么?谢谢

>>> None
>>> print(repr(None))
None
>>>
Run Code Online (Sandbox Code Playgroud)

python

6
推荐指数
2
解决办法
149
查看次数

使用-w(--word-regexp)标志为什么grep如此缓慢和内存密集?

我有一个文件中的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)

unix bash shell awk grep

6
推荐指数
1
解决办法
1369
查看次数

为什么Python列表实现为动态数组而不是环形缓冲区?

listPython中的A 现在实现为动态指针数组,因此它不适合在前端插入和删除.但是,环形缓冲区也支持O(1)索引.它也可以像动态数组一样扩展和收缩,以支持两端的O(1)摊销插入和删除.为什么CPython没有选择这个实现,或者它的主要缺点是什么?

python language-design list data-structures python-internals

6
推荐指数
1
解决办法
241
查看次数

在Python 3.5+中list()vs iterable unpacking

有没有之间的任何实际的差别list(iterable),并[*iterable]在支持后者的Python版本?

python iterable list python-3.x python-internals

6
推荐指数
1
解决办法
280
查看次数