我有几个可能保存我的数据的文件; 它们可以以不同的方式压缩,因此要打开它们我需要使用file(),gzip.GzipFile()而其他也返回文件对象(支持with接口).
我想尝试每一个,直到一个成功开放,所以我可以做类似的事情
try:
with gzip.GzipFile(fn + '.gz') as f:
result = process(f)
except (IOError, MaybeSomeGzipExceptions):
try:
with xCompressLib.xCompressFile(fn + '.x') as f:
result = process(f)
except (IOError, MaybeSomeXCompressExceptions):
try:
with file(fn) as f:
result = process(f)
except IOError:
result = "some default value"
Run Code Online (Sandbox Code Playgroud)
如果我有几十个可能的压缩变体,这显然是不可行的.(嵌套将越来越深,代码看起来总是非常相似.)
有没有更好的拼写方法?
编辑:如果可能的话,我希望process(f)除了try/except以外,以避免意外捕获在中提出的异常process(f).
我们正在使用Sonar检查代码的质量,Sonar找到了将float或double相等的代码与常量值进行比较,如下所示:
if (x == 0.0) { … }
Run Code Online (Sandbox Code Playgroud)
变量与(0.0)相比较的值是常量,如果变量可以等于此值,则该值也不会计算,而只能通过常量设置.这通常用于检查变量是否尚未设置或仍处于初始化状态,例如-1.0,在值只能为正的情况下可能用于"尚未设置".
因此,由于这些值从未计算过,只是从常量中设置,因此声纳投诉对我们没用.仅对于计算值(或者不能精确表示为浮点数或双精度值的断裂值),关于平等测试的抱怨是有意义的.
我现在的问题是:更改代码的最佳做法是什么,以便Sonar不再抱怨这个?
我看到几个选项:
(0.0 <= x && x <= 0.0)或!(x != 0.0)(目前似乎对Sonar没问题).Double.doubleToRawLongBits()比较这些值的位,如下所示:(Double.doubleToRawLongBits(x) != Double.doubleToRawLongBits(0.0)).我真的不喜欢这些解决方案,我想,也许,有一个更好的解决方案,我想不到.
在python中对某些天气数据运行模拟时遇到一些问题.数据以.tif格式提供,因此我曾经按照代码尝试打开图像以将数据提取到numpy数组中.
from PIL import Image
im = Image.open('jan.tif')
Run Code Online (Sandbox Code Playgroud)
虽然当我运行此代码时,我收到以下错误:
PIL.Image.DecompressionBombError: Image size (933120000 pixels) exceeds limit of 178956970 pixels, could be decompression bomb DOS attack.
Run Code Online (Sandbox Code Playgroud)
看起来这只是对这种类型的攻击的某种保护,但我实际上需要数据,它来自一个有信誉的来源.有没有办法解决这个问题,还是我必须寻找另一种方法来做到这一点?
我有一个大的本地文件.我想使用该boto库将该文件的gzip压缩版本上传到S3 .该文件太大,无法在上载之前在磁盘上高效地进行gzip,因此在上传过程中应该以流式方式对其进行gzip压缩.
该boto库知道一个函数set_contents_from_file(),它需要一个类似文件的对象.
该gzip库知道GzipFile可以通过名为的参数获取对象的类fileobj; 它会在压缩时写入此对象.
我想结合这两个函数,但是一个API想要自己阅读,另一个API想要自己编写; 既不知道被动操作(如写入或被读取).
有没有人知道如何以工作方式结合这些?
编辑:我接受了一个答案(见下文),因为它暗示我要去哪里,但如果你有同样的问题,你可能会发现我自己的答案(也在下面)更有帮助,因为我实现了一个使用分段上传的解决方案.
我试图想出一种回归测试数字序列的方法.
我的测试系统会为每个系统版本生成大量数字(例如高度,宽度,深度等).这些数字因版本不同而有所不同.给定一系列"好"版本和一个"新"版本,我想找到最不正常的序列.
例:
"好"版本:
version width height depth
1 123 43 302
2 122 44 304
3 120 46 300
4 124 45 301
Run Code Online (Sandbox Code Playgroud)
"新版本:
5 121 60 305
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我显然希望找到高度序列,因为值60比宽度或深度更突出.
我当前的方法计算好案例的每个序列的均值和标准差,并且对于新版本的数字,它计算该数字是该序列的一部分的概率(基于已知的均值和标准偏差).这工作......有点儿.
我的序列中的数字不一定是高斯分布在平均值附近,但通常是相当恒定的,有时只会产生异常值,这似乎也是相当恒定的,例如10,10,10,10,10,5,10,10在这种情况下,仅基于平均值和标准偏差,值10不会100%可能在序列中,并且值5将是不太可能的.
我考虑使用直方图方法,并在那里先犹豫不决.直方图的问题在于我需要为每个序列存储大量信息(与平均值和标准差相反).
我想到的下一个方面是,我非常确定这种任务不是新的,并且可能已经有一些解决方案可以很好地适应我的情况; 但我在研究中发现并不多.
我发现像PyBrain这样的库,乍一看似乎处理数字序列,然后显然试图用模拟神经网络分析这些.我不确定这对我来说是不是一种方法(而且似乎我必须为每个数字序列存储大量数据,如完整的神经网络).
所以我的问题是:
是否有技术,算法或科学学科可以帮助我分析数字序列以找出异常(在最后一个值中)?最好每个序列只存储少量数据;-)
对于具体的实现,我更喜欢Python,但也欢迎其他语言的提示.
python statistics numbers machine-learning regression-testing
我想创建一个数组,它保存max()一个窗口移动通过给定的numpy数组的所有es.如果这听起来令人困惑,我很抱歉.我举个例子.输入:
[ 6,4,8,7,1,4,3,5,7,2,4,6,2,1,3,5,6,3,4,7,1,9,4,3,2 ]
Run Code Online (Sandbox Code Playgroud)
窗口宽度为5的输出应为:
[ 8,8,8,7,7,7,7,7,7,6,6,6,6,6,6,7,7,9,9,9,9 ]
Run Code Online (Sandbox Code Playgroud)
每个数字应为输入数组宽度为5的子数组的最大值:
[ 6,4,8,7,1,4,3,5,7,2,4,6,2,1,3,5,6,3,4,7,1,9,4,3,2 ]
\ / \ /
\ / \ /
\ / \ /
\ / \ /
[ 8,8,8,7,7,7,7,7,7,6,6,6,6,6,6,7,7,9,9,9,9 ]
Run Code Online (Sandbox Code Playgroud)
我没有在numpy中找到一个可以做到这一点的开箱即用的功能(但是如果有的话我不会感到惊讶;我并不总是在考虑numpy开发人员的想法).我考虑创建一个移位的2D版本的输入:
[ [ 6,4,8,7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1 ]
[ 4,8,7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9 ]
[ 8,7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9,4 ]
[ 7,1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9,4,3 ]
[ 1,4,3,5,7,8,4,6,2,1,3,5,6,3,4,7,1,9,4,3,2 ] ]
Run Code Online (Sandbox Code Playgroud)
然后我可以申请np.max(input, 0)这个并得到我的结果.但这在我的情况下似乎并不高效,因为我的数组和窗口宽度都可以很大(> 1000000条目和> 100000窗口宽度).数据会被窗口宽度的因素或多或少地炸毁.
我也考虑过np.convolve()以某种方式使用,但无法找到实现目标的方法.
任何想法如何有效地做到这一点?
我有一个运行多个窗口的屏幕会话.我想附加它,在其中创建一个新的屏幕窗口并在该新窗口中启动一个shell.
问题:如何从屏幕会话外的命令行执行此操作?
我已经尝试了很多,例如screen -x(但它附加到现有的一个屏幕窗口;它不会创建一个新窗口,也不会启动一个新的shell).任何提示都是受欢迎的.
环境是Linux(Ubuntu 12.04).
令我感到惊讶的是,我无法在正则表达式中匹配德国变音符号.我尝试了几种方法,大多数涉及设置区域设置,但到目前为止无济于事.
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
re.findall(r'\w+', 'abc def g\xfci jkl', re.L)
re.findall(r'\w+', 'abc def g\xc3\xbci jkl', re.L)
re.findall(r'\w+', 'abc def güi jkl', re.L)
re.findall(r'\w+', u'abc def güi jkl', re.L)
Run Code Online (Sandbox Code Playgroud)
这些版本都没有与umlaut-u(ü)正确匹配\w+.同时删除re.L标志或为模式字符串添加前缀u(使其成为unicode)对我没有帮助.
有任何想法吗?标志如何re.L正确使用?
我正在搜索有关ElasticSearch如何根据其索引中的数据量进行扩展的信息,并且我很惊讶我在该主题上找不到多少.也许来自这里的人群的一些经验可以帮助我.
我们目前正在使用CloudSearch索引≈700万个文档; 在CloudSearch中,这会产生2个m2.xlarge类型的实例.我们正在考虑转而使用ElasticSearch来降低成本.但我在ElasticSearch的扩展上发现的是,它可以很好地扩展,可以分布在多个实例等.
但是这种数据需要什么样的机器(内存,光盘)?
如果我将数据量增加12倍(≈80,000万份文档),会如何改变?
scaling amazon-web-services elasticsearch amazon-cloudsearch
我试图在我的数据中找到在多个方面相同的条目.我目前使用嵌套聚合的复杂查询来执行此操作:
{
"size": 0,
"aggs": {
"duplicateFIELD1": {
"terms": {
"field": "FIELD1",
"min_doc_count": 2 },
"aggs": {
"duplicateFIELD2": {
"terms": {
"field": "FIELD2",
"min_doc_count": 2 },
"aggs": {
"duplicateFIELD3": {
"terms": {
"field": "FIELD3",
"min_doc_count": 2 },
"aggs": {
"duplicateFIELD4": {
"terms": {
"field": "FIELD4",
"min_doc_count": 2 },
"aggs": {
"duplicate_documents": {
"top_hits": {} } } } } } } } } } } }
Run Code Online (Sandbox Code Playgroud)
这在某种程度上起作用,因为当没有找到重复项时,我得到的结果如下所示:
{
"took" : 5,
"timed_out" : false,
"_shards" : {
"total" : …Run Code Online (Sandbox Code Playgroud) python ×6
nested ×2
aggregate ×1
amazon-s3 ×1
boto ×1
dataset ×1
detach ×1
double ×1
duplicates ×1
equality ×1
exception ×1
gnu-screen ×1
gzip ×1
gzipfile ×1
image ×1
java ×1
linux ×1
locale ×1
max ×1
numbers ×1
numpy ×1
performance ×1
regex ×1
scaling ×1
scipy ×1
search ×1
shell ×1
sonarqube ×1
statistics ×1
try-except ×1