我正在使用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)
我该怎么办?我应该使用异常处理吗?或者有更简单的方法吗? …
我有一个这样的列表:
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)
有什么建议?
我正在尝试从文本文件中读取文本,读取行,删除包含特定字符串的行(在本例中为"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)
我应该从上面的代码中编辑什么?
我有这样的代码:
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)
怎么了?号码已经改变.
我的想法错在哪里?
例如,我有一个这样的列表:
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)
我该怎么办?任何帮助都会非常棒!
我有两个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)
我尝试了一些方法..但它们似乎效率很低。有什么办法可以有效地做到这一点?
我使用的数据文件如下所示:
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很新,所以我不知道该怎么做
任何帮助都会很棒.提前致谢!
我有两个数据列表,分别是:
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的大小非常大,因此效率问题就出现了。
有什么聪明有效的方法来解决这个问题吗?任何建议将不胜感激
先感谢您!
我有这样的代码:
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) 我有这样的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中并行迭代两个列表?
我有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)
任何帮助都会很棒.提前致谢
例如,我有一个这样的字符串:
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个字符那样的答案.
有什么建议?
例如,我有一个这样的列表:
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对象不可调用..