随着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)
如果每个项目实例确实都有链接值(尽管是空字符串),为什么我不能访问此密钥?
对于给定的列表,我希望:
我可以使用组合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)
但这里有一些问题:
Python是否为自定义逐步切片提供了内置机制?FWIW,我实际上正在处理一个大熊猫(版本0.18.0)系列,我刚刚使用了常规列表的例子以便于解释.
不知何故,是否有可能将一个条件语句赋予可选参数?
我使用以下构造进行的初始尝试未成功:
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
(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) 给定以下字符串(或类似的字符串,其中一些可能包含多个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地址,我怎样才能使它只匹配第一个?
非常感谢.
我的日志文件中有一行,其中包含有问题的版本的版本号。它将始终是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)。
谢谢
按照此处给出的建议,我使用检查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) 给出一个list x例如
[4,6,7,21,1,7,3]
Run Code Online (Sandbox Code Playgroud)
我需要提取那些值less than or equal to 4.这很容易做到,但我还需要注意列表中这些值发生的位置.如果所有值都是唯一的,我知道我可能会list.index()以某种方式使用它.但是会有重复的价值观.如何最好地实现这一目标?
在寻找复制时:
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两次?
经过大量研究,我终于设法在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),工具提示和样式不存在.
这是一个已知的限制吗?还是可以实现?