簡體   English   中英

JSON解析器Python腳本問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM