小编H.C*_*hoi的帖子

我想异常处理'列表索引超出范围.'

我正在使用BeautifulSoup并解析一些HTML.

我从每个HTML (使用for循环)获取某些数据并将该数据添加到某个列表中.

问题是,一些HTML具有不同的格式(并且它们没有我想要的数据).

所以,我试图使用异常处理并null为列表添加值(我应该这样做,因为数据序列很重要.)

例如,我有一个代码,如:

soup = BeautifulSoup(links)
dlist = soup.findAll('dd', 'title')
# I'm trying to find content between <dd class='title'> and </dd>
gotdata = dlist[1]
# and what i want is the 2nd content of those
newlist.append(gotdata)
# and I add that to a newlist
Run Code Online (Sandbox Code Playgroud)

而且有些链接没有<dd class='title'>,所以我想做的是将字符串添加null到列表中.

出现错误:

list index out of range.
Run Code Online (Sandbox Code Playgroud)

我尝试过的是添加这样的一些行:

if not dlist[1]:  
   newlist.append('null')
   continue
Run Code Online (Sandbox Code Playgroud)

但它没有成功.它仍然显示错误:

list index out of range.
Run Code Online (Sandbox Code Playgroud)

我该怎么办?我应该使用异常处理吗?或者有更简单的方法吗? …

python exception-handling list

90
推荐指数
4
解决办法
22万
查看次数

通过偶数和奇数元素将列表拆分为一半?

可能重复:
Python程序将列表拆分为两个具有交替元素的列表

我有一个这样的列表:

list1 = [blah, 3, haha, 2, pointer, 1, poop, fire]
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

list = [3, 2, 1, fire]
Run Code Online (Sandbox Code Playgroud)

所以我想要的是列出前一个列表的偶数元素.我尝试使用一个for语句并尝试删除第二个元素,同时将它们附加到列表中,但它没有成功:

count = 0
for a in list1:
 list2.append(a)
 if count % 2 = = 1:
  list2.pop(count)

print list2
Run Code Online (Sandbox Code Playgroud)

有什么建议?

python split list

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

删除包含特定字符串的行

我正在尝试从文本文件中读取文本,读取行,删除包含特定字符串的行(在本例中为"bad"和"naughty").我写的代码是这样的:

infile = file('./oldfile.txt')

newopen = open('./newfile.txt', 'w')
for line in infile :

    if 'bad' in line:
        line = line.replace('.' , '')
    if 'naughty' in line:
        line = line.replace('.', '')
    else:
        newopen.write(line)

newopen.close()
Run Code Online (Sandbox Code Playgroud)

我这样写了但是没有用.

一件重要的事情是,如果文本的内容是这样的:

good baby
bad boy
good boy
normal boy
Run Code Online (Sandbox Code Playgroud)

我不希望输出有空行.所以不喜欢:

good baby

good boy
normal boy
Run Code Online (Sandbox Code Playgroud)

但像这样:

good baby
good boy
normal boy
Run Code Online (Sandbox Code Playgroud)

我应该从上面的代码中编辑什么?

python line

20
推荐指数
3
解决办法
8万
查看次数

更改for循环中的迭代次数

我有这样的代码:

loopcount = 3
for i in range(1, loopcount)
   somestring = '7'
   newcount = int(somestring)
   loopcount = newcount
Run Code Online (Sandbox Code Playgroud)

所以我想要的是修改循环"内部"的范围.

我编写了这段代码,期望for循环的范围在第一个循环期间会变为(1,7),但它没有发生.

相反,无论我输入什么号码,它只运行2次.(我想要6次......在这种情况下)

我使用print检查了这个值:

    loopcount = 3
    for i in range(1, loopcount)
       print loopcount
       somestring = '7'
       newcount = int(somestring)
       loopcount = newcount
       print loopcount
#output:
3
7
7
7
Run Code Online (Sandbox Code Playgroud)

怎么了?号码已经改变.

我的想法错在哪里?

python loops for-loop range

16
推荐指数
3
解决办法
2万
查看次数

如何将两个列表的元素添加到一个列表中?

例如,我有一个这样的列表:

list1 = [good, bad, tall, big]

list2 = [boy, girl, guy, man]
Run Code Online (Sandbox Code Playgroud)

我想制作一个这样的列表:

list3 = [goodboy, badgirl, tallguy, bigman]
Run Code Online (Sandbox Code Playgroud)

我试过这样的事情:

list3=[]
list3 = list1 + list2
Run Code Online (Sandbox Code Playgroud)

但这只会包含值 list1

所以我用过for:

list3 = []
for a in list1:
 for b in list2:
  c = a + b
  list3.append(c)
Run Code Online (Sandbox Code Playgroud)

但它会导致太多列表(在这种情况下,4*4 = 16)

我该怎么办?任何帮助都会非常棒!

python list

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

将单个numpy数组的值添加到其他numpy数组中的所有列

我有两个numpy数组

A= array([[1,2,3,4],
          [5,6,7,8],
          [9,10,11,12]])

B = array([10,20,30])
Run Code Online (Sandbox Code Playgroud)

我想生成数组C:

C = array([11,12,13,14],
          [25,26,27,28],
          [39,40,41,42]])
Run Code Online (Sandbox Code Playgroud)

我尝试了一些方法..但它们似乎效率很低。有什么办法可以有效地做到这一点?

python arrays numpy

6
推荐指数
1
解决办法
63
查看次数

用gnuplot制作基于时间的图表

我使用的数据文件如下所示:

2012.07.21  83
2012.07.22  54
2012.07.23  122
2012.07.24  104
2012.07.25  97
2012.07.26  114
2012.07.27  97
2012.07.28  83
2012.07.29  60
2012.07.30  106
2012.07.31  75
Run Code Online (Sandbox Code Playgroud)

这是它的一小部分,文件也包含其他年份.我想要一个显示日期数量的图表(显示每天有多少结果)

我所做的是:

gnuplot> set xdata time
gnuplot> set timefmt "%Y.%m.%d"
gnuplot> plot "sample.txt"
Run Code Online (Sandbox Code Playgroud)

但它说:需要完全使用规格的x时间数据

我做错了什么?有什么建议?我对gnuplot很新,所以我不知道该怎么做

任何帮助都会很棒.提前致谢!

format time date gnuplot

5
推荐指数
1
解决办法
3531
查看次数

将两个列表相乘以生成 python 数据框的智能方法

我有两个数据列表,分别是:

 a = [1,1,1, 0,0,0]
 b = [9,8,7, 6,5,4]
Run Code Online (Sandbox Code Playgroud)

我想要的输出是:

df = [[9,9,9, 0,0,0],
       [8,8,8, 0,0,0],
       [7,7,7, 0,0,0],
       [6,6,6, 0,0,0],
       [5,5,5, 0,0,0],
       [4,4,4, 0,0,0]]
Run Code Online (Sandbox Code Playgroud)

我目前正在做的事情是这样的:

for aa in a:

    counter = 0

    df = pd.DataFrame()

    while counter<len(b): 

        df[counter] = pd.Series(b)*a[counter]

        counter+=1
Run Code Online (Sandbox Code Playgroud)

这看起来绝对是低效的。

在我的实际应用中,a和b的大小非常大,因此效率问题就出现了。

有什么聪明有效的方法来解决这个问题吗?任何建议将不胜感激

先感谢您!

python list dataframe

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

我想生成连续的日期

我有这样的代码:

import time
from datetime import date
startyear = raw_input("start year: ")
startmonth = raw_input("start month: ")
startday = raw_input("start day: ")
endyear = raw_input("end year: ")
endmonth = raw_input("end month: ")
endday = raw_input("end day: ")

startdate = date(int(startyear), int(startmonth), int(startday))
while startdate < date(int(endyear), int(endmonth), int(endday)):
    print startdate
    startdate = startdate.replace(day=startdate.day + 1)
Run Code Online (Sandbox Code Playgroud)

这段代码的作用是:
1.通过手动输入
确定开始和结束日期2.生成它们之间的日期列表

但问题是,如果我设置日期,例如,
startdate: 2012-10-28
enddate: 2012-11-4
输出将是:

2012-10-28
2012-10-29
2012-10-30
2012-10-31
ValueError: day is out of range for month
Run Code Online (Sandbox Code Playgroud)

我希望输出如下:

2012-10-28
2012-10-29
2012-10-30 …
Run Code Online (Sandbox Code Playgroud)

python datetime date

3
推荐指数
2
解决办法
1673
查看次数

如何使用beautifulsoup获取原始文本?

我有这样的xml:

<link>
www.link1.com
</link>
<link>
www.link2.com
</link>
Run Code Online (Sandbox Code Playgroud)

我试过这段代码:

from BeautifulSoup import BeautifulStoneSoup 
soup = BeautifulStoneSoup(results2)     #Beautiful Soup
linklist = soup.findAll('link')
print soup
Run Code Online (Sandbox Code Playgroud)

使用此代码,输出是

[<link>www.link1.com</link>,<link>www.link2.com</link>]
Run Code Online (Sandbox Code Playgroud)

但我想要这样的输出

[www.link1.com, www.link2.com]
Run Code Online (Sandbox Code Playgroud)

python xml parsing beautifulsoup hyperlink

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

我可以在python中集成多个列表吗?

可能重复:
如何在Python中并行迭代两个列表?

我有3个这样的列表:

name = ['sam', 'john', 'napoleon', 'tanaka', 'ming']
country = ['USA', 'England', 'France', 'Japan', 'China']
age = [23, 41, 19, 16, 55]
Run Code Online (Sandbox Code Playgroud)

我想要一个像这样的输出:

sam; USA; 23
john; England; 41
napoleon; France; 19
tanaka; Japan; 16
ming; China; 55
Run Code Online (Sandbox Code Playgroud)

任何帮助都会很棒.提前致谢

python list

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

将单个/多个字符更改为另一个单个字符

例如,我有一个这样的字符串:

my_string = 'a hello aaaaa hi aaaaaaa bye bbb'
Run Code Online (Sandbox Code Playgroud)

我想改变'a''a''b'.所以我想要的输出是:

changed_string = 'b hello b hi b bye bbb'
Run Code Online (Sandbox Code Playgroud)

我尝试使用替换,然后使多个'b's单个'b',但它会影响'b'最初在字符串中的多个s.

我不想要像前n个字符那样的答案.

有什么建议?

python string replace character

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

我可以将列表更改为字符串,修改它,然后再将其更改为列表吗?

例如,我有一个这样的列表:

lista = ['abc', 'alpha', 'bravo', 'charlie']
Run Code Online (Sandbox Code Playgroud)

然后我将其更改为字符串并修改它:

lista = str(lista)
re.sub('a','b', lista)
Run Code Online (Sandbox Code Playgroud)

然后我会得到一个'字符串',如:

lista = ['bbc','blphb','brbvo','chbrlie']
Run Code Online (Sandbox Code Playgroud)

我希望它再次成为一个列表.

有什么建议?或者我可以修改列表中的内容吗?简单的方法将是最好的.

编辑:我正在使用beutifulsoup的findall列表.代码如下:

desclist = soup.findAll('description')
desclist[:] = (x.replace(r'.+', ' ') for x in desclist)
print desclist
Run Code Online (Sandbox Code Playgroud)

我正试图改变'.' 或者'.'到''但是它说nonetype对象不可调用..

python regex string list

0
推荐指数
1
解决办法
235
查看次数