- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
首先,对于冗长的标题感到抱歉。这是我的系统规范。 Windows 7 64 位,在 Pycharm 教育版 1.0.1 中运行 python 3.4.3 64 位
现在,进入问题。我有一个列表,其中包含从网站提取的数据。该列表包含字符串,有些只是日期,有些只是单词,有些是带单词的日期。它看起来像这样:
tempDates = ['Date', 'Visitor', 'Home', 'Notes', '2013-10-01', 'Washington Capitals', 'Chicago Blackhawks', None, '2013-10-01', 'Winnipeg Jets',..., 'St. Louis Blues',..., 'Postponed due to blizzard until 2014-02-25', etc]
我想做的是删除除独立日期之外的所有内容。使用生成器、while 循环和 if 语句,我能够删除除包含日期和单词的字符串之外的所有内容。该部分代码如下所示:
dates = []
d = 0
while d < len(tempDates):
if tempDates[d] is None or all(i.isalpha() or i == ' ' or i == ',' or i == '-' or i == '.' for i in tempDates[d]):
d += 1
else:
dates.append(tempDates[d])
d += 1
这段代码的输出是这样的:
dates = ['2013-10-01', '2013-10-01',..., '2014-01-21', '2014-01-21', '2014-01-21', 'Postponed due to snowstorm until 2014-01-22', '2014-01-22', 'Make-up game for snowstorm 2014-01-21',..., '2014-06-13']
在不删除独立日期的情况下,我找不到任何方法来删除同时包含单词和日期的字符串。我尝试更改程序从 tempDates 中排序日期的顺序,但这只会导致更多的无限循环和内存问题。如果有帮助,这里是完整的程序:
1 from bs4 import BeautifulSoup
2 import requests
3 import pandas as pd
4 import re
5
6 # create empty lists to hold the data pulled from the website
7 dateList = []
8 gameList = []
9 winnerList = []
10 loserList = []
11
12 year = 2014 #program is made to iterate through all available seasons since 1918, but is set to start at 2014 for quicker troubleshooting
13 while year < 2016: # stops year at 2015, as this is the last year stats are available
14 if year == 2005: # prevents an error from the program trying to load data from 2005, as that season was canceled
15 year += 1
16 else:
17 # pulls the whole page and puts it into r
18 r = requests.get('http://www.hockey-reference.com/leagues/NHL_{}_games.html'.format(year))
19 data = r.text
20
21 soup = BeautifulSoup(data, "lxml")
22 foundTeams = soup.find_all(href=re.compile("teams"))
23 teams = [link.string for link in foundTeams]
24 teams = teams[2:]
25
26 foundScores = soup.find_all(align=re.compile("right"))
27 tempScores = [link.string for link in foundScores]
28 tempScores = tempScores[2:]
29
30 foundDates = soup.find_all(align=re.compile("left"))
31 tempDates = [link.string for link in foundDates]
32
33 dates = []
34 d = 0
35 while d < len(tempDates):
36 if tempDates[d] is None or all(i.isalpha() or i == ' ' or i == ',' or i == '-' or i == '.' for i in tempDates[d]):
37 d += 1
38 else:
39 dates.append(tempDates[d])
40 d += 1
41
42 season = soup.find('h1')
43 season = [link.string for link in season]
44
45 games = len(teams) / 2
46 games = int(games)
47
48 # goes through the pulled data and saves it into lists to be written to a compiled file
49 x = 0
50 y = 0
51 while x < len(teams):
52 if x % 2 == 0:
53 if tempScores[x] is None or all(i.isalpha() or i == ' ' or i == ',' for i in tempScores[x]):
54 x += 2
55 else:
56 print(dates[y])
57 if tempScores[x] > tempScores[x+1]:
58 print("In game", y + 1)
59 print("The", teams[x], tempScores[x], "won against the", teams[x+1], tempScores[x+1])
60 winnerList.append(teams[x])
61 loserList.append(teams[x+1])
62 elif tempScores[x] < tempScores[x+1]:
63 print("In game", y + 1)
64 print("The", teams[x+1], tempScores[x+1], "won against the", teams[x], tempScores[x])
65 winnerList.append(teams[x+1])
66 loserList.append(teams[x])
67 dateList.append(dates[y])
68 gameList.append(y)
69 x += 1
70 y += 1
71 else:
72 x += 1
73 year += 1
74
75 # converts the compiled lists to data frames
76 dateList = pd.DataFrame(dateList)
77 gameList = pd.DataFrame(gameList)
78 winnerList = pd.DataFrame(winnerList)
79 loserList = pd.DataFrame(loserList)
80
81 # puts the data frames into one data frame
82 compiledStats = dateList
83 compiledStats['Game'] = gameList
84 compiledStats['Game Winner'] = winnerList
85 compiledStats['Game Loser'] = loserList
86
87 # rename the columns
88 compiledStats.columns = ['Date', 'Game', 'Game Winner', 'Game Loser']
89 # write to a new file
90 compiledStats.to_csv('CSV/Compiled_NHL_Stats2.0.csv', index=False)
最佳答案
tempDates = ['Date', 'Visitor', 'Home', 'Notes', '2013-10-01', 'Washington Capitals', 'Chicago Blackhawks', None, '2013-10-01', 'Winnipeg Jets','...', 'St. Louis Blues','...', 'Postponed due to blizzard until 2014-02-25', 'etc']
print [i for i in tempDates if re.match(r"\d{4}-\d{2}-\d{2}",str(i))]
这应该为你做
关于python - 从包含日期的列表中删除字符串,而不影响列表中的独立日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31461726/
我有一个类似于以下的结构。 class A { string title; List bItem; } class B { int pric
本地流 和 远程流 两者都是“媒体流列表 ”。 本地流 包含“本地媒体流 ” 对象 但是,远程流 包含“媒体流 ” 对象 为什么差别这么大? 当我使用“本地流 “- 这个对我有用: localVide
我正在尝试将 8 列虚拟变量转换为 8 级排名的一列。 我试图用这个公式来做到这一点: =IF(OR(A1="1");"1";IF(OR(B1="1");"2";IF(OR(C1="1");"3";I
我正在使用面向对象编程在 Python 中创建一个有点复杂的棋盘游戏的实现。 我的问题是,许多这些对象应该能够与其他对象交互,即使它们不包含在其中。 例如Game是一个对象,其中包含PointTrac
有没有办法获取与 contains 语句匹配的最深元素? 基本上,如果我有嵌套的 div,我想要最后一个元素而不是父元素: Needle $("div:contains('Needle')")
出于某种原因,我无法在 Google 上找到答案!但是使用 SQL contains 函数我怎么能告诉它从字符串的开头开始,即我正在寻找等同于的全文 喜欢 'some_term%'。 我知道我可以使用
我正在尝试创建一个正则表达式来匹配具有 3 个或更多元音的字符串。 我试过这个: [aeiou]{3,} 但它仅在元音按顺序排列时才有效。有什么建议吗? 例如: 塞缪尔 -> 有效 琼 -> 无效 S
嘿所以我遇到了这样的情况,我从数据库中拉回一个客户,并通过包含的方式包含所有案例研究 return (from c in db.Clients.Include("CaseStudies")
如果关键字是子字符串,我无法弄清楚为什么这个函数不返回结果。 const string = 'cake'; const substring = 'cak'; console.log(string.in
我正在尝试将包含特定文本字符串的任何元素更改为红色。在我的示例中,我可以将子元素变为蓝色,但是我编写“替换我”行的方式有些不正确;红色不会发生变化。我注意到“contains”方法通常写为 :cont
我想问一下我是否可以要求/包含一个语法错误的文件,如果不能,则require/include返回一个值,这样我就知道所需/包含的文件存在语法错误并且不能被要求/包含? file.php语法错误 inc
我想为所有包含youtube链接的链接添加一个rel。 这就是我正在使用的东西-但它没有用。有任何想法吗? $('a [href:contains(“youtube.com”)]')。attr('re
我正在尝试在 Elasticsearch 中查询。除搜索中出现“/”外,此功能均正常运行。查询如下所示 GET styling_rules/product_line_filters/_search {
我正在开发名为eBookRepository的ASP.NET MVC应用程序,其中包含在线图书。 电子书具有自己的标题,作者等。因此,现在我正在尝试实现搜索机制。我必须使用Elasticsearch作
我已阅读Firebase Documentation并且不明白什么是 .contains()。 以下是文档中 Firebase 数据库的示例规则: { "rules": { "rooms"
我的问题是我可以给出条件[ 'BookTitleMaster.id' => $xtitid, ] 如下所示 $bbookinfs = $this->BookStockin->BookIssue->fi
我需要能够使用 | 检查模式在他们中。例如,对于像“dtest|test”这样的字符串,像 d*|*t 这样的表达式应该返回 true。 我不是正则表达式英雄,所以我只是尝试了一些事情,例如: Reg
我想创建一个正则表达式来不匹配某些单词... 我的字符:var test = "é123rr;and;ià456;or;456543" 我的正则表达式:test.match(\((?!and)(?!o
我在 XSLT 中有一个名为 variable_name 的变量,如果相关产品具有名称为 A 或 B 或两者均为 A & 的属性,我将尝试将其设置为 1 B.
您好,我想让接待员和经理能够查看工作类型和费率并随后进行更新。但是技术人员只能查看不能更新。该图是否有效? 我读到扩展用例是由发起基本用例的参与者发起的。我应该如何区分技术人员只能启动基本案例而不能启
我是一名优秀的程序员,十分优秀!