先舉個例子,如下test.txt文件數據,需要提取每條數據的title和content, 單獨保存到文件中:
spiderTime:{'num':'12223'}
title:中國保險1xxx
summary: 請在xxx
content: 當事人11sfdffghfhgfjjd
tag:1
spiderTime:{'num':'12224'}
title:中國保險2xxx
summary: 請在xxx
content: 當事人22sfdfffdffghfjd
tag:2
spiderTime:{'num':'12225'}
title:中國保險3xxx
summary: 請在xxx
content: 當事人33sfdffggghfjd
tag:3
首先發現,數據是以空行作為分割點,所以,可以以空行拆分數據,做處理,具體代碼如下:
import re
# 創建一個空列表用於后續保存每次空行分割的一條完整數據
li = []
with open('test.txt','r',encoding='utf8') as f:
while True:
cont = f.readline().replace('\n','')
if not cont: # 如果為空行,則表示取完一次數據,可以執行操作;
if not li: # 如果列表也為空,則表示數據讀完了,結束循環
break
title = re.findall(r"\'title:(.*?)\'\,", str(li))[0]
content = re.findall(r"\'content:(.*?)\'\,", str(li))[0]
print('title: {},content: {}'.format(title,content))
li = []
else:
li.append(cont)
上述代碼中通過正則進行匹配title和content內容,如果它們在每條數據中的行號固定的話,簡單些可以直接通過列表索引取值. 代碼運行輸出結果如下:
title: 中國保險1xxx,content: 當事人11sfdffghfhgfjjd
title: 中國保險2xxx,content: 當事人22sfdfffdffghfjd
title: 中國保險3xxx,content: 當事人33sfdffggghfjd
思路總結: 按行循環讀取數據, 當讀取到換行符時(注意,換行符'\n'不等於空,切記), 作為一個切分點標記,可以把之前讀取到的利用列表或字符串拼接構成一個整體,再使用正則進行數據提取, 當讀取的數據為'\n'且后面沒有數據時,自動結束循環;