小编Mar*_*zzi的帖子

如何在python中识别未知的日期时区时区

我需要做什么

我有一个时区不知道的日期时间对象,我需要添加一个时区,以便能够将其与其他时区感知日期时间对象进行比较.我不想将我的整个应用程序转换为时区,而不是因为这个遗留案例.

我试过的

首先,要证明问题:

Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import datetime
>>> import pytz
>>> unaware = datetime.datetime(2011,8,15,8,15,12,0)
>>> unaware
datetime.datetime(2011, 8, 15, 8, 15, 12)
>>> aware = datetime.datetime(2011,8,15,8,15,12,0,pytz.UTC)
>>> aware
datetime.datetime(2011, 8, 15, 8, 15, 12, tzinfo=<UTC>)
>>> aware == unaware
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't compare offset-naive and offset-aware …
Run Code Online (Sandbox Code Playgroud)

python timezone datetime

446
推荐指数
10
解决办法
27万
查看次数

如何访问python nosetests设置函数中设置的变量

我想我想做的事情很简单.我想在测试设置函数中初始化几个变量,然后在用该设置修饰的测试函数中使用它们.以下简单的例子说明了我的意思:

from nose.tools import *

def setup():
    foo = 10

def teardown():
    foo = None

@with_setup(setup, teardown)
def test_foo_value():
    assert_equal(foo, 10)
Run Code Online (Sandbox Code Playgroud)

这导致:

$ nosetests tests/test_foo.py 
E
======================================================================
ERROR: test_foo.test_foo_value
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/mtozzi/.virtualenvs/foo/local/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
self.test(*self.arg)
  File "/home/mtozzi/code/foo/tests/test_foo.py", line 12, in test_foo_value
assert_equal(foo, 10)
NameError: global name 'foo' is not defined

----------------------------------------------------------------------
Ran 1 test in 0.006s

FAILED (errors=1)
Run Code Online (Sandbox Code Playgroud)

使用旧的unittest样式,我可以将它们设置为测试类的实例变量,但我认为nosetests不要求你使用类.我也考虑将它们设置为包全局变量,但这似乎不是一个非常好的做法.我希望有一些显而易见的事情我不知道这样做.

在此先感谢您的帮助.

python nose

21
推荐指数
1
解决办法
6435
查看次数

在python中解析日期而不使用默认值

我正在使用python的dateutil.parser工具来解析我从第三方提要获得的一些日期.它允许指定一个默认日期,它本身默认为今天,用于填充已解析日期的缺失元素.虽然这通常很有用,但我的用例没有合理的默认值,我宁愿将部分日期视为我根本没有得到日期(因为它几乎总是意味着我的数据乱码).我写了以下工作:

from dateutil import parser
import datetime

def parse_no_default(dt_str):
  dt = parser.parse(dt_str, default=datetime.datetime(1900, 1, 1)).date()
  dt2 = parser.parse(dt_str, default=datetime.datetime(1901, 2, 2)).date()
  if dt == dt2:
    return dt
  else:
    return None
Run Code Online (Sandbox Code Playgroud)

(这个片段只查看日期,因为我只关心我的应用程序,但类似的逻辑可以扩展到包含时间组件.)

我想知道(希望)有更好的方法.解析相同的字符串两次只是为了看它是否填写不同的默认值似乎是浪费资源,至少可以说.

这是针对预期行为的一组测试(使用nosetest生成器):

import nose.tools
import lib.tools.date

def check_parse_no_default(sample, expected):
  actual = lib.tools.date.parse_no_default(sample)
  nose.tools.eq_(actual, expected)

def test_parse_no_default():
  cases = ( 
      ('2011-10-12', datetime.date(2011, 10, 12)),
      ('2011-10', None),
      ('2011', None),
      ('10-12', None),
      ('2011-10-12T11:45:30', datetime.date(2011, 10, 12)),
      ('10-12 11:45', None),
      ('', None),
      )   
  for sample, expected in cases:
    yield check_parse_no_default, sample, …
Run Code Online (Sandbox Code Playgroud)

python python-dateutil

13
推荐指数
1
解决办法
9115
查看次数

Apache Hive中的自动化测试

我即将开始使用Apache Hadoop/Hive开展项目,该项目将涉及一组hive查询脚本,以便为各种下游应用程序生成数据源.这些脚本似乎是某些单元测试的理想选择 - 它们代表了我的数据存储和客户端应用程序之间的API契约的实现,因此,编写给定的一组起始数据的预期结果应该是微不足道的.我的问题是如何运行这些测试.

如果我正在使用SQL查询,我可以使用像SQLlite或Derby这样的东西来快速启动测试数据库,加载测试数据并针对它们运行一系列查询测试.不幸的是,我不知道任何这样的Hive工具.目前,我最好的想法是让测试框架调出一个hadoop本地实例并针对它运行Hive,但我以前从未这样做过,我不确定它是否可行,或者是正确的路径.

另外,我对于我正在做什么是单元测试或集成测试的迂腐讨论不感兴趣 - 我只需要能够证明我的代码有效.

testing unit-testing hive

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

如何避免Rust中过多的克隆?

我正在尝试学习Rust,并且在我开始编写Fibonacci序列迭代器进行练习之前就像许多人一样.我的第一次使用u32s并且工作正常,所以我决定尝试编写通用版本.这是我的结果:

use num::Integer;
use std::ops::Add;

pub struct Fibonacci<T: Integer + Add + Clone> {
    nth: T,
    n_plus_one_th: T,
}

impl<T: Integer + Add + Clone> Iterator for Fibonacci<T> {
    type Item = T;
    fn next(&mut self) -> Option<T> {
        let temp = self.nth.clone();
        self.nth = self.n_plus_one_th.clone();
        self.n_plus_one_th = temp.clone() + self.n_plus_one_th.clone();
        Some(temp)
    }
}

impl<T: Integer + Add + Clone> Fibonacci<T> {
    pub fn new() -> Fibonacci<T> {
        Fibonacci {
            nth: T::one(),
            n_plus_one_th: T::one(),
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我用a …

rust

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

为什么我的scikit学习HashingVectorizo​​r给我带有binary = True set的浮点数?

我正在尝试使用scikit-learn的伯努利朴素贝叶斯分类器.我使用CountVectorizo​​r让分类器在一个小数据集上正常工作,但是当我尝试使用HashingVectorizo​​r处理更大的数据集时遇到了麻烦.保持所有其它参数(培训文档,测试文档,分类和特征提取设置)不变,并从CountVectorizo​​r只是切换到HashingVectorizo​​r引起了我的分类总是吐出的所有文件相同的标签.

我编写了以下脚本来研究两个特征提取器之间的区别:

from sklearn.feature_extraction.text import HashingVectorizer, CountVectorizer

cv = CountVectorizer(binary=True, decode_error='ignore')
h = HashingVectorizer(binary=True, decode_error='ignore')

with open('moby_dick.txt') as fp:
    doc = fp.read()

cv_result = cv.fit_transform([doc])
h_result = h.transform([doc])

print cv_result
print repr(cv_result)
print h_result
print repr(h_result)
Run Code Online (Sandbox Code Playgroud)

(其中'moby_dick.txt'是项目gutenberg的mo​​by dick副本)

(简明)结果:

  (0, 17319)    1
  (0, 17320)    1
  (0, 17321)    1
<1x17322 sparse matrix of type '<type 'numpy.int64'>'
    with 17322 stored elements in Compressed Sparse Column format>

  (0, 1048456)  0.00763203138591
  (0, 1048503)  0.00763203138591
  (0, 1048519)  0.00763203138591
<1x1048576 sparse matrix of type '<type 'numpy.float64'>' …
Run Code Online (Sandbox Code Playgroud)

python feature-extraction scikit-learn

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