我在python 2.6中使用标准的json模块来序列化浮点数列表.但是,我得到的结果如下:
>>> import json
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Run Code Online (Sandbox Code Playgroud)
我希望浮点数只用两位小数进行格式化.输出应如下所示:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.67, 23.97, 23.87]'
Run Code Online (Sandbox Code Playgroud)
我尝试过定义自己的JSON Encoder类:
class MyEncoder(json.JSONEncoder):
def encode(self, obj):
if isinstance(obj, float):
return format(obj, '.2f')
return json.JSONEncoder.encode(self, obj)
Run Code Online (Sandbox Code Playgroud)
这适用于唯一的浮动对象:
>>> json.dumps(23.67, cls=MyEncoder)
'23.67'
Run Code Online (Sandbox Code Playgroud)
但嵌套对象失败:
>>> json.dumps([23.67, 23.97, 23.87])
'[23.670000000000002, 23.969999999999999, 23.870000000000001]'
Run Code Online (Sandbox Code Playgroud)
我不想有外部依赖,所以我更喜欢坚持使用标准的json模块.
我怎样才能做到这一点?
我有一个文本文件,在isoformat中有很多日期时间字符串.字符串类似于:
'2009-02-10 16:06:52.598800'
这些字符串是使用生成的str(datetime_object).问题是,由于某种原因,str(datetime_object)当datetime对象的微秒设置为零时生成不同的格式,并且某些字符串如下所示:
'2009-02-10 16:06:52'
如何解析这些字符串并将其转换为日期时间对象?
获取对象中的所有数据非常重要,包括微秒.
我必须使用Python 2.5,我发现%f2.5中不存在微秒的格式指令.
是否有用于在Python中编写P2P应用程序的库或框架?
我知道最初的Bittorrent客户端是用Python编写的.我看起来像JXTA但是对于Python.
我正在编写一个Python脚本来处理从Procmail返回的电子邮件.正如这个问题所示,我正在使用以下Procmail配置:
:0:
|$HOME/process_mail.py
Run Code Online (Sandbox Code Playgroud)
我的process_mail.py脚本通过stdin接收电子邮件,如下所示:
From hostname Tue Jun 15 21:43:30 2010
Received: (qmail 8580 invoked from network); 15 Jun 2010 21:43:22 -0400
Received: from mail-fx0-f44.google.com (209.85.161.44)
by ip-73-187-35-131.ip.secureserver.net with SMTP; 15 Jun 2010 21:43:22 -0400
Received: by fxm19 with SMTP id 19so170709fxm.3
for <username@domain.com>; Tue, 15 Jun 2010 18:47:33 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.103.84.1 with SMTP id m1mr2774225mul.26.1276652853684; Tue, 15
Jun 2010 18:47:33 -0700 (PDT)
Received: by 10.123.143.4 with HTTP; Tue, 15 Jun 2010 …Run Code Online (Sandbox Code Playgroud) 我希望我的函数接受一个可以是unicode对象或utf-8编码字符串的参数.在我的函数中,我想将参数转换为unicode.我有这样的事情:
def myfunction(text):
if not isinstance(text, unicode):
text = unicode(text, 'utf-8')
...
Run Code Online (Sandbox Code Playgroud)
是否可以避免使用isinstance?我正在寻找更友善的鸭子.
在我的解码实验中,我遇到了几种奇怪的Python行为.例如:
>>> u'hello'.decode('utf-8')
u'hello'
>>> u'cer\xf3n'.decode('utf-8')
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/usr/lib/python2.6/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in po
sition 3: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
要么
>>> u'hello'.decode('utf-8')
u'hello' 12:11
>>> unicode(u'hello', 'utf-8')
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: decoding Unicode is not supported …Run Code Online (Sandbox Code Playgroud) 我需要在Python中获得较少的n个列表.我需要这个非常快,因为它是性能的关键部分,需要重复很多次.
n通常不大于10,列表通常有大约20000个元素.每次调用该函数时,列表总是不同的.无法进行排序.
最初,我写了这个函数:
def mins(items, n):
mins = [float('inf')]*n
for item in items:
for i, min in enumerate(mins):
if item < min:
mins.insert(i, item)
mins.pop()
break
return mins
Run Code Online (Sandbox Code Playgroud)
但是这个函数无法击败对整个列表进行排序的简单排序(项目)[:n].这是我的测试:
from random import randint, random
import time
test_data = [randint(10, 50) + random() for i in range(20000)]
init = time.time()
mins = mins(test_data, 8)
print 'mins(items, n):', time.time() - init
init = time.time()
mins = sorted(test_data)[:8]
print 'sorted(items)[:n]:', time.time() - init
Run Code Online (Sandbox Code Playgroud)
结果:
mins(items, n): 0.0632939338684
sorted(items)[:n]: 0.0231449604034
Run Code Online (Sandbox Code Playgroud)
sorted()[:n]快三倍.我相信这是因为:
有没有办法击败sorted()[:n]?我应该使用C扩展,Pyrex或Psyco或类似的东西吗? …
我正在尝试使用dart动态加载一个dart脚本.我正在使用这样的东西:
的test.html:
...
<script src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script>
<script type="application/dart" src="test.dart"></script>
...
Run Code Online (Sandbox Code Playgroud)
test.dart:
#import('dart:html');
main() {
var script = new ScriptElement();
script.type = 'application/dart';
script.src = 'helloworld.dart';
document.body.elements.add(script);
}
Run Code Online (Sandbox Code Playgroud)
它不起作用.但是,如果我在HTML文件中内联相同的代码,它可以正常工作:
的test.html:
...
<script src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script>
<script type="application/dart">
#import('dart:html');
main() {
var script = new ScriptElement();
script.type = 'application/dart';
script.src = 'helloworld.dart';
document.body.elements.add(script);
}
</script>
...
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我正在为Windows开发一个小托盘图标应用程序,我需要显示类似于在MSN Messenger或任何其他IM应用程序中收到新消息时出现的非侵入式视觉通知.
我看过Snarl,但它似乎是一个我需要安装的独立应用程序.我想要一些可以与我的应用程序捆绑在一个安装程序,库中的东西.
你推荐哪一个?
Python支持是一个巨大的优势.
我想获取工件的依赖项列表,包括传递依赖项但排除(或至少标记)可选依赖项。
输出mvn dependency:list或mvn dependency:tree包含可选依赖项,没有任何方法可以过滤掉它们。
在执行长时间运行的进程时,最好向用户提供反馈,例如,更新进度条.
GUI库的一些常见问题解答建议如下:
function long_running_progress()
do_some_work()
update_progress_bar()
while finish
do_some_work()
update_progress_bar()
end while
end function
Run Code Online (Sandbox Code Playgroud)
无论如何,我们知道将业务逻辑代码与用户界面代码分开是一种最佳实践.上面的示例是在业务逻辑功能中混合用户界面代码.
在业务逻辑层中实现功能的好技术是什么,其进度可以通过用户界面轻松跟踪而无需混合层?
欢迎任何语言或平台的答案.