我有一个文本文件,我使用python读了。它从网址开始,并提供其他信息,从(y)或(n)开始。在线之间,可能有几个空白行。例如,文本文件可以像这样,
http://usatoday30.usatoday.com/money/industries/energy/2005-12-28-enron-participants_x.htm
(y) Lay, Kenneth
(y) Skilling, Jeffrey
(n) Howard, Kevin
(n) Krautz, Michael
我想要名称以(y)开头,然后返回为列表。说,对于这种情况,返回列表就是这样,
result = ["Lay, Kenneth", "Skilling, Jeffrey"]
我读取数据如下,
poi_names_data = open("../final_project/poi_names.txt", "r")
for row in poi_names_data:
print row, "n"
如何从行中提取正确的信息?
如注释中所建议的,您可以使用 startswith
来决定是否要处理行并使用 re.sub
删除(y)
,领先空间和线路断开n
,之后应给予它。您的预期输出:
import re
result = []
with open("test.txt") as text:
for row in text:
if row.startswith("(y)"):
result.append(re.sub(r"(y)s+|n", "", row))
result
# ['Lay, Kenneth', 'Skilling, Jeffrey']
我建议按行读取文件并相应地读取文件。原因是,如果您的文件很大,真的很大,那么性能就会更好,并且记忆足迹更少。
import io
import re
result = []
rx = re.compile(r'(?<=(y)).*', re.MULTILINE)
with open('data.txt','r+') as f:
for line in f:
match = rx.search(line)
if match:
result.append(match.group(0).strip())
print(result)
我将从您的示例数据中获取以下输出。(假设数据存储在文件test.txt
中)
['Lay, Kenneth', 'Skilling, Jeffrey']