就像是:
for (a,b) in kwargs.iteritems():
if not b : del kwargs[a]
Run Code Online (Sandbox Code Playgroud)
此代码引发异常,因为迭代时更改字典.
我发现另一个字典只有非常漂亮的解决方案:
res ={}
res.update((a,b) for a,b in kwargs.iteritems() if b is not None)
Run Code Online (Sandbox Code Playgroud)
谢谢
在不保留顺序的情况下在Python中统一列表的最快方法?我在互联网上看到了许多复杂的解决方案 - 它们能否比简单的更快:
list(set([a,b,c,a]))
Run Code Online (Sandbox Code Playgroud) 我需要使用lxml下载并解析网页并构建UTF-8 xml输出.我认为伪代码模式更具说明性:
from lxml import etree
webfile = urllib2.urlopen(url)
root = etree.parse(webfile.read(), parser=etree.HTMLParser(recover=True))
txt = my_process_text(etree.tostring(root.xpath('/html/body'), encoding=utf8))
output = etree.Element("out")
output.text = txt
outputfile.write(etree.tostring(output, encoding=utf8))
Run Code Online (Sandbox Code Playgroud)
所以webfile可以是任何编码(lxml应该处理这个).Outputfile必须是utf-8.我不知道在哪里使用编码/编码.这个架构好吗?(我找不到关于lxml和编码的好教程,但我可以发现很多问题...)我需要强大的解决方案.
编辑:
因此,对于发送utf-8到lxml,我使用
converted = UnicodeDammit(webfile, isHTML=True)
if not converted.unicode:
print "ERR. UnicodeDammit failed to detect encoding, tried [%s]", \
', '.join(converted.triedEncodings)
continue
webfile = converted.unicode.encode('utf-8')
Run Code Online (Sandbox Code Playgroud) 我有这个代码的问题:
file = tempfile.TemporaryFile(mode='wrb')
file.write(base64.b64decode(data))
file.flush()
os.fsync(file)
# file.seek(0)
f = gzip.GzipFile(mode='rb', fileobj=file)
print f.read()
Run Code Online (Sandbox Code Playgroud)
我不知道它为什么不打印任何东西.如果我取消注释file.seek,则会发生错误:
File "/usr/lib/python2.5/gzip.py", line 263, in _read
self._read_gzip_header()
File "/usr/lib/python2.5/gzip.py", line 162, in _read_gzip_header
magic = self.fileobj.read(2)
IOError: [Errno 9] Bad file descriptor
Run Code Online (Sandbox Code Playgroud)
仅供参考,此版本可以正常工作:
x = open("test.gzip", 'wb')
x.write(base64.b64decode(data))
x.close()
f = gzip.GzipFile('test.gzip', 'rb')
print f.read()
Run Code Online (Sandbox Code Playgroud)
编辑:对于wrb问题.初始化时它不会给我一个错误.Python 2.5.2.
>>> t = tempfile.TemporaryFile(mode="wrb")
>>> t.write("test")
>>> t.seek(0)
>>> t.read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 9] Bad file descriptor
Run Code Online (Sandbox Code Playgroud) 我有一个$subscribers可能是undef 的标量,引用HASH或引用ARRAY.我已经分配了样本值$VAR1,$VAR2并$VAR3进行了测试.
我只$subscribers对它是ARRAY的引用感兴趣,其中它包含多个值.在其他情况下,我对打印任何东西都不感兴趣(例如$subscribers=$VAR2;
在Perl v5.16.2下,代码似乎运行良好; 但是,当我将它移动到运行Perl v5.8.8的目标机器时,我收到编译错误:
% ./test.pl
Type of arg 1 to keys must be hash (not private variable) at ./test.pl line 23, near "$subscribers) "
Execution of ./test.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)
代码如下:
#!/usr/bin/perl -w
use strict;
use warnings;
use Data::Dumper;
my $VAR1 = undef;
my $VAR2 = {'msisdn' => '1234'};
my $VAR3 = [
{'msisdn' => '1111'},
{'msisdn' => '2222'}, …Run Code Online (Sandbox Code Playgroud) 我想解析srt字幕:
1
00:00:12,815 --> 00:00:14,509
Chlapi, jak to jde s
t?ma pracovníma sv?tlama?.
2
00:00:14,815 --> 00:00:16,498
Trochu je zesilujeme.
3
00:00:16,934 --> 00:00:17,814
Jo, sleduj.
Run Code Online (Sandbox Code Playgroud)
每个项目都进入结构.有了这个正则表达式:
A:
RE_ITEM = re.compile(r'(?P<index>\d+).'
r'(?P<start>\d{2}:\d{2}:\d{2},\d{3}) --> '
r'(?P<end>\d{2}:\d{2}:\d{2},\d{3}).'
r'(?P<text>.*?)', re.DOTALL)
Run Code Online (Sandbox Code Playgroud)
B:
RE_ITEM = re.compile(r'(?P<index>\d+).'
r'(?P<start>\d{2}:\d{2}:\d{2},\d{3}) --> '
r'(?P<end>\d{2}:\d{2}:\d{2},\d{3}).'
r'(?P<text>.*)', re.DOTALL)
Run Code Online (Sandbox Code Playgroud)
这段代码:
for i in Subtitles.RE_ITEM.finditer(text):
result.append((i.group('index'), i.group('start'),
i.group('end'), i.group('text')))
Run Code Online (Sandbox Code Playgroud)
使用代码BI只有一个项目在数组中(因为贪婪.*)和代码AI有空的'文本',因为没有贪心.*?
怎么治这个?
谢谢