小编Alf*_*lfe的帖子

几个`与`s在`尝试`s

我有几个可能保存我的数据的文件; 它们可以以不同的方式压缩,因此要打开它们我需要使用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).

python nested exception try-except

17
推荐指数
3
解决办法
299
查看次数

检查双打是否存在平等和声纳问题

我们正在使用Sonar检查代码的质量,Sonar找到了将float或double相等的代码与常量值进行比较,如下所示:

if (x == 0.0) { … }
Run Code Online (Sandbox Code Playgroud)

变量与(0.0)相比较的值是常量,如果变量可以等于此值,则该值也不会计算,而只能通过常量设置.这通常用于检查变量是否尚未设置或仍处于初始化状态,例如-1.0,在值只能为正的情况下可能用于"尚未设置".

因此,由于这些值从未计算过,只是从常量中设置,因此声纳投诉对我们没用.仅对于计算值(或者不能精确表示为浮点数或双精度值的断裂值),关于平等测试的抱怨是有意义的.

我现在的问题是:更改代码的最佳做法是什么,以便Sonar不再抱怨这个?

我看到几个选项:

  1. 将"test-for-unset"解压缩为特殊的测试函数; 但这只会减少发生次数(减少到1),而不是一般的问题.
  2. 标记Sonar的代码,使用特殊的装饰器忽略它.但我们希望避免使用这样的装饰器.
  3. 隐藏比较背后的比较(0.0 <= x && x <= 0.0)!(x != 0.0)(目前似乎对Sonar没问题).
  4. 调用Double.doubleToRawLongBits()比较这些值的位,如下所示:(Double.doubleToRawLongBits(x) != Double.doubleToRawLongBits(0.0)).
  5. 其他想法?

我真的不喜欢这些解决方案,我想,也许,有一个更好的解决方案,我想不到.

java double equality sonarqube

14
推荐指数
2
解决办法
5164
查看次数

Pillow在python中不会让我打开图像

在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)

看起来这只是对这种类型的攻击的某种保护,但我实际上需要数据,它来自一个有信誉的来源.有没有办法解决这个问题,还是我必须寻找另一种方法来做到这一点?

python image dataset

13
推荐指数
2
解决办法
3652
查看次数

如何使用boto上传到s3时进行gzip

我有一个大的本地文件.我想使用该boto库将该文件的gzip压缩版本上传到S3 .该文件太大,无法在上载之前在磁盘上高效地进行gzip,因此在上传过程中应该以流式方式对其进行gzip压缩.

boto库知道一个函数set_contents_from_file(),它需要一个类似文件的对象.

gzip库知道GzipFile可以通过名为的参数获取对象的类fileobj; 它会在压缩时写入此对象.

我想结合这两个函数,但是一个API想要自己阅读,另一个API想要自己编写; 既不知道被动操作(如写入或被读取).

有没有人知道如何以工作方式结合这些?

编辑:我接受了一个答案(见下文),因为它暗示我要去哪里,但如果你有同样的问题,你可能会发现我自己的答案(也在下面)更有帮助,因为我实现了一个使用分段上传的解决方案.

python gzip amazon-s3 boto gzipfile

12
推荐指数
3
解决办法
7440
查看次数

关于任意数列的回归测试

我试图想出一种回归测试数字序列的方法.

我的测试系统会为每个系统版本生成大量数字(例如高度,宽度,深度等).这些数字因版本不同而有所不同.给定一系列"好"版本和一个"新"版本,我想找到最不正常的序列.

例:

"好"版本:

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

12
推荐指数
1
解决办法
365
查看次数

NumPy数组中的滑动窗口中的Max

我想创建一个数组,它保存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()以某种方式使用,但无法找到实现目标的方法.

任何想法如何有效地做到这一点?

python performance numpy max scipy

11
推荐指数
4
解决办法
6361
查看次数

通过创建新的屏幕窗口附加到"屏幕"会话

我有一个运行多个窗口的屏幕会话.我想附加它,在其中创建一个新的屏幕窗口并在该新窗口中启动一个shell.

问题:如何从屏幕会话外的命令行执行此操作?

我已经尝试了很多,例如screen -x(但它附加到现有的一个屏幕窗口;它不会创建一个新窗口,也不会启动一个新的shell).任何提示都是受欢迎的.

环境是Linux(Ubuntu 12.04).

linux shell gnu-screen detach

10
推荐指数
3
解决办法
1万
查看次数

正则表达式匹配中的变音符号(通过语言环境?)

令我感到惊讶的是,我无法在正则表达式中匹配德国变音符号.我尝试了几种方法,大多数涉及设置区域设置,但到目前为止无济于事.

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正确使用?

python regex locale

10
推荐指数
1
解决办法
5655
查看次数

扩展ElasticSearch

我正在搜索有关ElasticSearch如何根据其索引中的数据量进行扩展的信息,并且我很惊讶我在该主题上找不到多少.也许来自这里的人群的一些经验可以帮助我.

我们目前正在使用CloudSearch索引≈700万个文档; 在CloudSearch中,这会产生2个m2.xlarge类型的实例.我们正在考虑转而使用ElasticSearch来降低成本.但我在ElasticSearch的扩展上发现的是,它可以很好地扩展,可以分布在多个实例等.

但是这种数据需要什么样的机器(内存,光盘)?

如果我将数据量增加12倍(≈80,000万份文档),会如何改变?

scaling amazon-web-services elasticsearch amazon-cloudsearch

9
推荐指数
2
解决办法
1万
查看次数

在Elasticsearch中查找重复项

我试图在我的数据中找到在多个方面相同的条目.我目前使用嵌套聚合的复杂查询来执行此操作:

{
  "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)

search nested aggregate duplicates elasticsearch

9
推荐指数
1
解决办法
2118
查看次数