小编Pyd*_*man的帖子

Scrapy:如果密钥存在,为什么我会得到KeyError?

随着items.py定义:

import scrapy 

class CraigslistSampleItem(scrapy.Item):
    title = scrapy.Field()
    link = scrapy.Field()
Run Code Online (Sandbox Code Playgroud)

并通过蜘蛛填充每个项目:

item = CraigslistSampleItem()
item["title"] = $someXpath.extract() 
item["link"] = $someOtherXpath.extract()
Run Code Online (Sandbox Code Playgroud)

当我将这些附加到列表(由parse()返回)并将其存储为例如csv时,我得到两列数据,标题链接,如预期的那样.如果我注释掉XPath的链接并存储为csv,我仍然会得到两列数据,链接列中的值为空字符串.这似乎是合理的,因为title和link都是每个CraigslistSampleItem类的属性.那么,我认为我可以做这样的事情(XPath for link仍然被注释掉):

  if item["link"] == '':
      print "link has not been given a value"
Run Code Online (Sandbox Code Playgroud)

然而,尝试获取每个项目的链接属性失败了:

File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scrapy/item.py", line 50, in __getitem__
    return self._values[key]
exceptions.KeyError: 'link'
Run Code Online (Sandbox Code Playgroud)

如果每个项目实例确实都有链接值(尽管是空字符串),为什么我不能访问此密钥?

python key list scrapy scrapy-spider

4
推荐指数
1
解决办法
3513
查看次数

根据列表项的索引模数执行不同的操作

对于给定的列表,我希望:

  1. 对于第一个元素,然后每个第3个后续元素(索引3,6等),什么也不做
  2. 从第二个元素(索引1)开始,然后每3个元素(索引4,7等)开始,执行某个操作
  3. 从第三个元素(索引2)开始,然后每3个元素(索引5,8等)开始,执行不同的操作

我可以使用组合range(len(mylist))::符号来逐步切片列表:

1::3 will give me the elements at indices 1, 4, 7, 10 etc.

::2 will give me the elements at indices 0, 2, 4, 6 etc.
Run Code Online (Sandbox Code Playgroud)

但这里有一些问题:

  • 例如,我不需要访问元素6
  • 两个切片之间存在一些重叠
  • 缺少5个指数

Python是否为自定义逐步切片提供了内置机制?FWIW,我实际上正在处理一个大熊猫(版本0.18.0)系列,我刚刚使用了常规列表的例子以便于解释.

python list slice python-2.7 pandas

4
推荐指数
1
解决办法
69
查看次数

Python函数可选参数 - 可以添加为条件?

不知何故,是否有可能将一个条件语句赋予可选参数?

我使用以下构造进行的初始尝试未成功:

y = {some value} if x == {someValue} else {anotherValue}
Run Code Online (Sandbox Code Playgroud)

其中x事先已分配.

更具体地说,我希望我的函数签名看起来像:

def x(a, b = 'a' if someModule.someFunction() else someModule.someOtherFunction()):
   :
   :
Run Code Online (Sandbox Code Playgroud)

非常感谢

python arguments function optional-parameters conditional-statements

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

C:为什么需要通过内存地址扫描数组元素?

(C初学者警报)

我想从用户读取一些整数并将它们存储在一个数组中.所以:

int main (void)
{

int i, num, cont = 0;
int arre[10];

for (int i=0;i<5;i++)
{
    scanf("%d", arre[i]);

etc.
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我在OSX上得到了分段故障11.如果我用Valgrind运行它,当我输入第一个整​​数时会出现问题,它告诉我:

==1610== Command: ./ArraysAndPointers
==1610== 
2
==1610== Use of uninitialised value of size 8
==1610==    at 0x18F0BA: __svfscanf_l (in /usr/lib/system/libsystem_c.dylib)
==1610==    by 0x18718A: scanf (in /usr/lib/system/libsystem_c.dylib)
==1610==    by 0x100000F2D: main (ArraysAndPointers.c:11)
==1610== 
==1610== Invalid write of size 4
==1610==    at 0x18F0BA: __svfscanf_l (in /usr/lib/system/libsystem_c.dylib)
==1610==    by 0x18718A: scanf (in /usr/lib/system/libsystem_c.dylib)
==1610==    by 0x100000F2D: main (ArraysAndPointers.c:11)
==1610==  Address 0x0 is …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers pass-by-reference character-arrays

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

正则表达式:如何从字符串中仅提取第一个IP地址(在Python中)

给定以下字符串(或类似的字符串,其中一些可能包含多个IP地址):

from mail2.oknotify2.com (mail2.oknotify2.com. [208.83.243.70]) by mx.google.com with ESMTP id dp5si2596299pdb.170.2015.06.03.14.12.03
Run Code Online (Sandbox Code Playgroud)

我希望在Python中提取第一个也是唯一的第一个IP地址.([0-9]{2,}\.){3}([0-9]{2,}){1}在nregex.com上试用的第一次尝试看起来几乎没问题,匹配IP地址很好,但也匹配大致类似于IP地址的其他子字符串(170.2015.06.03.14.12.03).re.compile/re.findall虽然传递相同的模式,但结果是:

[(u'243.', u'70'), (u'06.', u'03')]
Run Code Online (Sandbox Code Playgroud)

很明显,正则表达式并不好.如何改进它以便它更整洁并捕获所有IPV4地址,我怎样才能使它只匹配第一个?

非常感谢.

python regex

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

如何用grep匹配数字

我的日志文件中有一行,其中包含有问题的版本的版本号。它将始终是1.43.93。*例如

<some text > Version=1.43.98.7488, <more text>
Run Code Online (Sandbox Code Playgroud)

我只想指出版本号。

以下内容均未返回任何内容:

grep -G -m 1 1.43.98\.\d+ mylog.txt
egrep -m 1 "1.43.98\.\d+" mylog.txt
Run Code Online (Sandbox Code Playgroud)

内部版本号出现在日志文件中的多个位置(这就是为什么我将-m标志传递为1的原因),但是显然我只对第一个匹配感兴趣。

任何提示将不胜感激。我正在使用Cygwin(GNU grep 2.6.3)。

谢谢

regex grep cygwin

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

Python:ipaddress AttributeError:'str'对象没有属性

按照此处给出的建议,我使用检查ipaddress模块来执行类型检查:

In [25]: IPv4Address(u'100.64.1.1') in IPv4Network(u'100.64.0.0/10')
Out[25]: True
Run Code Online (Sandbox Code Playgroud)

在 IPython 中工作正常。然而,当我把它变成一个函数时:

import ipaddress
def isPrivateIp(ip):
    ip4addressBlocks = [u'0.0.0.0/8', u'10.0.0.0/8', u'100.64.0.0/10', u'127.0.0.0/8', u'169.254.0.0/16', u'172.16.0.0/12', u'192.0.0.0/24', u'192.0.2.0/24', u'192.88.99.0/24', 
    u'192.168.0.0/16', u'198.18.0.0/15', u'198.51.100.0/24', u'203.0.113.0/24', u'224.0.0.0/4', u'240.0.0.0/4', u'255.255.255.255/32']
    unicoded = unicode(ip)
    if any(unicoded in ipaddress.IPv4Network(address) for address in ip4addressBlocks):
        return True
    else:
        return False

print isPrivateIp(r'169.254.255.1')
Run Code Online (Sandbox Code Playgroud)

我得到:

  File "isPrivateIP.py", line 14, in <module>
    print isPrivateIp(r'169.254.255.1')
  File "isPrivateIP.py", line 9, in isPrivateIp
    if any(unicoded in ipaddress.IPv4Network(address) for address in ip4addressBlocks):
  File "isPrivateIP.py", …
Run Code Online (Sandbox Code Playgroud)

python ip-address ipv4 ipv6

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

如何从Python列表中提取同时还要考虑提取元素的位置?

给出一个list x例如

[4,6,7,21,1,7,3]
Run Code Online (Sandbox Code Playgroud)

我需要提取那些值less than or equal to 4.这很容易做到,但我还需要注意列表中这些值发生的位置.如果所有值都是唯一的,我知道我可能会list.index()以某种方式使用它.但是会有重复的价值观.如何最好地实现这一目标?

python indexing list python-2.7

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

为什么np.linspace(1,5,5,dtype = int,endpoint = False)导致包含两次的数组?

在寻找复制时:

In [61]: np.arange(0,5)
Out[61]: array([0, 1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

使用np.linspace(),我观察到:

In [70]: np.linspace(1,5,5, dtype = int, endpoint=False)
Out[70]: array([1, 1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

为什么在这种情况下np.linspace()包含值1两次?

python numpy

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

pygal图表不显示Jupyter/IPython笔记本中的工具提示

经过大量研究,我终于设法在pygal中使用工具提示:

Config = pygal.Config()
Config.js = ['http://kozea.github.io/pygal.js/2.0.x/pygal-tooltips.js']
bar_chart = pygal.Bar(Config)                                      # Then create a bar graph object
bar_chart.add('Fibonacci', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])  # Add some values
bar_chart.render_to_file('bar_chart.svg', force_uri_protocol='https') 
Run Code Online (Sandbox Code Playgroud)

在生成的.svg中,工具提示现在可以正常工作,但只有在浏览器中打开文件时才能正常工作.

当图表直接显示在Jupyter中时(IPython.core.display.SVG(filename="bar_chart.svg")或者简单地显示bar_chart),工具提示和样式不存在.

这是一个已知的限制吗?还是可以实现?

python svg ipython pygal jupyter-notebook

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