[英]JSON Parser Python Script Issues
我是CS的大一學生,試圖調試一個簡單的Python腳本。
該腳本正在嘗試解析JSON文件的目錄,又名AWS桶。 我不知道這些錯誤是從哪里來的,但是:
import json
import os
from pprint import pprint
jsonDirectory = "/path/to/dir/"
targetRegion = "-insert-region-here"
print("Searching for records with AWS Region: " + targetRegion)
print("")
for filename in os.listdir(jsonDirectory):
print("Reading: " + filename)
data = json.dumps(open(jsonDirectory + filename))
for i in range(len(data["Records"])):
if data["Records"][i]["awsRegion"] == targetRegion:
print("---------------------------")
print("Record #" + str(i))
print("Username: " + data["Records"][i]["userIdentity"] ["userName"])
print("Event name: " + data["Records"][i]["eventName"])
print("Event time: " + data["Records"][i]["eventTime"])
print("---------------------------")
print("")
print("Completed reading files.")
錯誤:
追溯(最近一次通話最近):文件“ /path/to/file.py”,第13行,數據= json.dumps(open(jsonDirectory +文件名))文件“ /Library/Frameworks/Python.framework/Versions/ 3.6 / lib / python3.6 / json / init .py“,第231行,在轉儲中返回_default_encoder.encode(obj)文件” /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/編碼塊中的第199行中的“ encoder py.py” = self.iterencode(o,_one_shot = True)文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py”,第257行,以iterencode返回_iterencode(o,0)文件“ /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/json/encoder.py”,第180行,默認為o。 上課 。 name )TypeError:“ TextIOWrapper”類型的對象不可JSON序列化
讓我假設您不在西歐或美國,並且默認編碼不是UTF-8
或通常非常兼容的東西,例如iso-8859-1
。 從上面的評論
data = json.load(open(jsonDirectory + filename))
如果將該語句分隔為:
f = open(jsonDirectory + filename)
fdata = f.read()
data = json.loads(fdata)
您將看到錯誤發生在fdata = f.read()
。 建議是:
f = open(jsonDirectory + filename, encoding='my-encoding')
fdata = f.read()
data = json.loads(fdata)
如果不確定,請嘗試強制open
以忽略/忽略錯誤。 來自Python文檔, 網址為: https : //docs.python.org/3/library/functions.html#open
errors是一個可選字符串,它指定如何處理編碼和解碼錯誤-不能在二進制模式下使用。 可以使用各種標准錯誤處理程序(在“錯誤處理程序”下列出),盡管已向codecs.register_error()注冊的任何錯誤處理名稱也有效。 標准名稱包括:
- 如果存在編碼錯誤,則“嚴格”引發ValueError異常。 默認值None(無)具有相同的效果。
- 'ignore'忽略錯誤。 請注意,忽略編碼錯誤可能會導致數據丟失。
- “替換”導致替換標記(例如“?”)插入到數據格式不正確的地方。
- 'surrogateescape'將表示所有不正確的字節,作為Unicode私有使用區中從U + DC80到U + DCFF的代碼點。 當在寫入數據時使用surrogateescape錯誤處理程序時,這些專用代碼點將被轉換回相同的字節。 這對於處理未知編碼的文件很有用。
- 僅在寫入文件時才支持“ xmlcharrefreplace”。 編碼不支持的字符被替換為適當的XML字符引用&#nnn;。
- “反斜杠替換”用Python的反斜杠轉義序列替換格式錯誤的數據。
- 'namereplace'(僅在寫入時也受支持)用\\ N {...}轉義序列替換不支持的字符。
從ignore
開始,如:
f = open(jsonDirectory + filename, errors='ignore')
fdata = f.read()
data = json.loads(fdata)
並檢查輸出是否滿足您的要求或哪里出了問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.