[英]Python Loop through dictionary
我有一個要解析的文件。 它具有json格式的數據,但該文件不是json文件。 我想遍歷文件,並提取出totalReplyCount大於0的ID。
{ "totalReplyCount": 0,
"newLevel":{
"main":{
"url":"http://www.someURL.com",
"name":"Ronald Whitlock",
"timestamp":"2016-07-26T01:22:03.000Z",
"text":"something great"
},
"id":"z12wcjdxfqvhif5ee22ys5ejzva2j5zxh04"
}
},
{ "totalReplyCount": 4,
"newLevel":{
"main":{
"url":"http://www.someUR2L.com",
"name":"other name",
"timestamp":"2016-07-26T01:22:03.000Z",
"text":"something else great"
},
"id":"kjsdbesd2wd2eedd23rf3r3r2e2dwe2edsd"
}
},
我最初的嘗試是執行以下操作
def readCsv(filename):
with open(filename, 'r') as csvFile:
for row in csvFile["totalReplyCount"]:
print row
但我得到一個錯誤說明
TypeError:“文件”對象沒有屬性“ getitem ”
我知道這只是嘗試打印而不是做我想做的事,但是我是python的新手,對我做錯了卻迷失了。 正確的方法是什么? 對於ID,我的最終結果應如下所示:
['insdisndiwneien23e2es', 'lsndion2ei2esdsd',....]
編輯1- 7/26/16
當我復制代碼時,我發現格式化時出錯(太晚了,我很累..)。 我將其切換為更像JSON的適當格式。 此新編輯與我正在解析的文件正確匹配。 然后,我嘗試使用JSON解析它,並得到ValueError: Extra data: line 2 column 1 - line X column 1
:,其中X行是該行的結尾。
def readCsv(filename):
with open(filename, 'r') as file:
data=json.load(file)
pprint(data)
我還嘗試了DictReader,並得到了KeyError: 'totalReplyCount'
。 字典是無序的嗎?
編輯2 -7/27/16
休息片刻后,重新考慮一下,我意識到,我擁有的(在正確處理數據之后)是一個CSV文件,該文件在每行上都包含一個正確的JSON對象。 因此,我必須解析CSV文件,然后解析作為頂級,完整和完整JSON對象的每一行。 下面是我嘗試解析的代碼,但我得到的只是第一個字符串字符,即大括號'{':
def readCsv(filename):
with open(filename, 'r') as csvfile:
for row in csv.DictReader(csvfile):
for item in row:
print item[0]
我猜想DictReader會將json對象轉換為字符串,這就是為什么我只得到大括號而不是第一個鍵的原因。 如果我要print item[0:5]
我會在每行上以無序的方式得到前4個字符的混搭,我認為這是因為格式已變成無序的列表嗎? 我想我對問題的理解要好一些,但是仍然將我的頭放在數據結構和解析它們的方法上。 我想念什么?
閱讀問題和以上所有答案后,請檢查是否對您有用。
我已經將輸入文件視為簡單文件,而不是csv或json文件。
代碼流程如下:
import re tmp_id_to_store = '' id_list = [] for line in reversed(open("a.txt").readlines()): m = re.search('"id":"(\\w+)"', line.rstrip()) if m: tmp_id_to_store = m.group(1) n = re.search('{ "totalReplyCount": (\\d+),', line.rstrip()) if n: fou = n.group(1) if int(fou) > 0: id_list.append(tmp_id_to_store) tmp_id_to_store = '' print id_list
可以添加更多檢查點。
如果您的輸入文件是JSON,那么為什么不使用JSON庫解析它,然后對該數據運行for循環。 然后,只需要遍歷鍵並提取數據即可。
import json
from pprint import pprint
with open('data.json') as data_file:
data = json.load(data_file)
pprint(data)
看賈斯汀·皮爾的答案。 應該會有所幫助。
使用Python解析JSON文件中的值 ,此鏈接是否全部@ 使用Python解析JSON文件中的值? 通過stackoverflow。
這是一個單線外殼,應該可以解決您的問題,盡管它不是python。
egrep -o '"(?:totalReplyCount|id)":(.*?)$' filename | awk '/totalReplyCount/ {if ($2+0 > 0) {getline; print}}' | cut -d: -f2
輸出:
"kjsdbesd2wd2eedd23rf3r3r2e2dwe2edsd"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.