1. 程式人生 > 其它 >Arrow 時間處理模組,jsonpath解析json資料模組

Arrow 時間處理模組,jsonpath解析json資料模組

Arrow是一個更加智慧的Python時間處理庫。它實現並更新日期時間型別,支援建立、操作、格式化和轉換日期、時間和時間戳,可以使用更少匯入和程式碼處理日期和時間。

    import arrow
    
    
    # 返回時區的時間 2021-07-01T11:00:07.830552+08:00
    print(arrow.now())
    
    #
    print(arrow.now().year)
    
    #
    print(arrow.now().month)
    
    #
    print(arrow.now().day)
    
    
# 返回當前時區時間:2021-07-01 11:02:09.333066+08:00 print(arrow.now().datetime) # 返回當前時區的年月日 print(arrow.now().date()) # 獲取指定時區時間 上海時區:'Asia/Shanghai',美國時區:'US/Pacific' print(arrow.now('US/Pacific').datetime) # 2021-06-30 20:22:09.223668-07:00 print(arrow.now('Asia/Shanghai').datetime) #2021-07-01 11:22:09.223668+08:00
#獲取時間戳 :1625108805.093209 ,不管你是否指定地區,預設時區都不是北京時間,因此會少8個小時,因此我們需要加上8個小時 print(arrow.now('Asia/Shanghai').timestamp(),'上海') # 1625109948.842313 上海 print(arrow.now().timestamp(),'沒加') # 1625109948.842313 沒加 print(arrow.now().timestamp()+28800,'加了') # 正確時間1625138748.842313 加了 # Arrow物件轉換未字串時間 2021-07-01 11:09:44
print(arrow.now().format(fmt='YYYY-MM-DD HH:mm:ss')) #時間戳轉換為日期 timeStamp = arrow.now().timestamp()+28800 i = arrow.get(timeStamp) print(i.format('YYYY-MM-DD HH:mm:ss')) # 2021-07-01 11:25:48 # 當前時間的前一年,1個月前,2周前,3天后,2小時後時間 [years, months, days, hours, minutes, seconds, microseconds, weeks, quarters, weekday] print(arrow.now().shift(years=-1, months=-1, weeks=-2, days=3, hours=2).format()) # 2020-05-21 13:41:07+08:00

jsonpath用來解析json資料,是一種簡單的方法來提取給定JSON文件的部分內容。它提供了類似正則表示式的語法,可以解析複雜的巢狀資料結構,可以非常方便的提取介面返回的資料資訊。

    from jsonpath import jsonpath
    
    # 如果匹配不到返回False
    
    dic = {'語法規則字串':1111}
    ret = jsonpath(dic, '語法規則字串') # [1111]
    print(ret)

    new_dic = {
    "store": {
        "book": [{
                "category": " reference",
                "author": "Nigel Rees",
                "title": "sayings of the century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "3.R. R. Tolkien",
                "title": "The Lord of the Rings ",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {"color": " red",
        "price": 19.95
    },
        "expensive": 10
        }
    }

    # 獲取所有key=isbn的值 $..isbn: $代表最外層 ..代表模糊匹配
    print(jsonpath(new_dic,'$..isbn'))  # ['0-553-21311-3', '0-395-19395-8']

    # 獲取store下book下的所有author值 $最外層 .代表下一層(子節點) book[*] book裡面所有的 .子節點 key=author
    print(jsonpath(new_dic ,'$.store.book[*].author'))

    # 獲取store下以及所有子節點下的所有price
    print(jsonpath(new_dic, '$.store..price'))

    # 獲取book陣列的第3個值 [2]代表第三個值,從0開始
    print(jsonpath(new_dic, '$..book[2]'))

    #獲取book陣列的第一、第二的值 兩種方式:1.直接在列表傳對應索引, 2.列表切片的方式(注意:是左包含,右不包含)
    print(jsonpath(new_dic, '$..book[:2]'))
    print(jsonpath(new_dic, '$..book[0,1]'))

    # 獲取book陣列從索引2後的所有資料
    print(jsonpath(new_dic, '$..book[2:]'))

    # 獲取所有節點以及子節點中book陣列包含key=isbn的對應字典  book[] book裡面的資料, ?()過濾的操作, @ 使用過濾謂詞來處理當前節點
    print(jsonpath(new_dic, '$..book[?(@.isbn)]')) #這樣寫查出來就是book裡面子節點中含有key=isbn的字典

    # 獲取store下book陣列中price < 10的對應字典
    print(jsonpath(new_dic, '$.store.book[?(@.price < 10)]')) #[{'category': ' reference', 'author': 'Nigel Rees', 'title': 'sayings of the century', 'price': 8.95}, {'category': 'fiction', 'author': 'Herman Melville', 'title': 'Moby Dick', 'isbn': '0-553-21311-3', 'price': 8.99}]