Python - Доступ к элементам в файле, содержащем текстовую строку - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть файл, который содержит этот текст:

{"Referer": "https://dashboard", "Accept-Language": "en-GB","CST": "46e01f86be307fd0509217271e8c8c3cdcb0e661ee12f872a473cdeb26ac060201111", "Sec-Fetch-Site": "same-origin", "Accept-Encoding": "gzip, deflate, br", "Content-Type": "application/json", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Dest": "empty", "Cookie": "savedSR=null; personalisationTags=[]; _ga=GA1.2.982687521.1587128695; _gid=GA1.2.956366233.1587128695; AMCVS_434717FE52A6476F0A490D4C%40AdobeOrg=1; s_ecid=MCMID%7C12108296909723217653110223702033109972; optimizelyEndUserId=oeu1587128701566r0.7936576379275126; _gcl_au=1.1.250521668.1587128723; _gat_UA-53269626-3=1; _gali=loginbutton; sessionOpen=true; preferredAccountId=KY7KR; exitUrl=https://; exitPath=uk; deviceType=Desktop; deviceOs=Other; defaultDealingPlatform=PUREDEAL; client_id=a20fa8511e2a302574dddc5533444d0b; callerReqId=af712cb1fe891a75; X-SECURITY-TOKEN=9d2f5f8b93cad41d0b334fbff3590fb66fb787d96981be70ac27394f28d0791201111; REFRESH-TOKEN=eyJraWQiOiJDQVE4QU1JSUJDZ0tDQVFFQXFKdiIsInR5cCI6IkNMSUVOVF9SRUZSRVNIIiwiYWxnIjoiUlMyNTYiLCJ6aXAiOiJHWklQIn0.H4sIAAAAAAAAAFXMMQvCMBCG4f-S2eHu0ibXbuKik9C6OCbppQRqEFtBEP-7N7j4jQ8f79ukpUjdTpPpDQISth2T2ZnnKo8abqJ83A_DldmC8mG8qDROADO7KBZ8nqCFjtCTR-HEyaYpRRDnUAQps6fQeEWJ5EICBwSo01oJm-mxZY_E3oLCump-LHVeZCxzPVd91Zj_X_K6_8BjZ-HzBetQSCXFAAAA.O44FIhfHyu0-qO70yj36bvYfKhzCVdyqn44pP2VYeCdMcf877qejiwvTbpFqY9A9A8R5VoQHID5V38r9unmJyyt_Npz8b-yuGbmpSyFRy75Be8PtST8TwVYpCNgQF7Bxt5fG8z8G9p2ZU8J56V8zIjs1IuZQkq0G5qtFSJ3uQT3IRs-qPTnN8Fv50Ra2LowojLJDrfT7RHkA-MbFQGkheuVq7b8G15dZzFjlv2T6eSGzhesCAKvpAzAEiDkL25AG7quclI84w5zyltawR99KoRpL_JZvNXGbxIbNFjcPJvqqQI7vtAtylSvyCs76UKlSaF3cc61GaeRRkdYSU725lQ; D; ID=TD=DB400FA09853FBF32BD51785C67BDB2F2EEB2D75:CS=2; CST=46e01f86be307fd0509217271e8c8c3cdcb0e661ee12f872a473cdeb26ac060201111; ACCESS-TOKEN=eyJraWQiOiJDQVE4QU1JSUJDZ0tDQVFFQXFKdiIsInR5cCI6IkNMSUVOVF9BQ0NFU1MiLCJhbGciOiJSUzI1NiIsInppcCI6IkdaSVAifQ.H4sIAAAAAAAAAFXOsQrCQBAE0H_Z2mJ3z9xt0omNYiEkNiIWl8smBPQUE0EQ_91tLJzyMQzzhpjS7ZnnCaoT7I5hV8N5Aekyap63HVRASExFKQwLeE76yPGqxptVXR9FHBqvm4PJ0itSL75Vh6HvsMCSKXAglSTJpS61qN6TKnEvgeMyGGrLPib0yEgWWxvjDBUVEoglODSY7Bw0Yx4u2oxD3mdr5bb_b-nr_oMSHX6-T676f9oAAAA.dwqQl2p5IOSHKmrQfQgSAO1b3ua3p0M5i8iP2avlJQFc2JLRSw6lrC8W83ZXgtgxEKvrXPzut8mmuU-nWhU1sjOBObWUxBww2DixK-V7AC2BEyt5UKtC5JgSezbcyQeejOenlFWBOEEIeYUN4-yjySt_FRFzZ-iJoVGYw_o5wWL03dckv7c5jUlR30lEqby6M-wIhnkXjIMDItGUKOhdXgZOYFC-22ZEb43Cf2zbJPcAaLi9HNlBvC3G1VNpChVpxLKQt2fYbCdbxvAO1s2Kf2TAA67PFmb5oHj36H3ybnpo7czobaovk9jEs4quezVv_OYhkMiuz1O9chD7O-Vx3g; cpaEnabled=true....

Я хочу получить доступ к значениям CST и X-SECURITY-TOKEN и сохранить их в двух отдельных переменных. По какой-то причине у моего файла всегда будет CST с разделителем запятых, а у X-SECURITY-TOKEN всегда будет разделитель точки с запятой.

Чтобы получить вышеизложенное, я использую следующее для кода l oop:

searchfile = open("har.txt", "r")
for line in searchfile:
    print(line)
searchfile.close()

Нужно ли преобразовывать строку в словарь, чтобы я мог получить доступ к CST и X-SECURITY-TOKEN, или я просто делю разделение? Пожалуйста, сообщите

Ответы [ 3 ]

0 голосов
/ 21 апреля 2020

Попробуйте использовать json модуль для разбора json из файла:

import json

with open("har.txt", "r") as f:
    data = json.load(f)
    print(data["CST"]) # output: 46e01f86be307fd0509217271e8c8c3cdcb0e661ee12f872a473cdeb26ac060201111
0 голосов
/ 21 апреля 2020

Помимо использования JSON для первоначальной загрузки / анализа данных, все остальные ответы пропустили проблему с точкой с запятой. Это происходит от Cookie (s). Данные Cook ie обычно разделяются точкой с запятой. И X-SECURITY-TOKEN - это один из файлов cookie.

json.loads() загрузит строку, представляющую объект JSON, в Python. Затем получите доступ к каждому соответствующему ключу, как обычно, например «CST», как указали другие.

Кстати, используйте with open()... для управления файлами . Он обрабатывает ошибки, а также закрывает файл впоследствии.

with open("har.txt", "r") as searchfile:
    for line in searchfile:
        data = json.loads(line)
        cst = data["CST"]  # your CST data
        # now for cookies, first get all the cookie data
        cookies = data["Cookie"].split("; ")  # split on semi-colons with a space
        """This gives you a list of strings in the format "X=Y"
        where 'X' is the cookie name and 'Y' is its value. Looks like this:

        ['savedSR=null', 'personalisationTags=[]', '_ga=GA1.2.982687521.1587128695', ...]

        Next, we split each of thse on the '=' signs:
        """
        for cookie in cookies:
            name, value = cookie.split('=')  # tuple un-packing
            if name == 'X-SECURITY-TOKEN':  # check the cookie name
                security_token = value
                break  # we found the token, skip the remaining cookies
        else:
            # ^ if the for loop ends without reaching that 'break'
            # note the `else` indent is NOT for the `if`
            print('Security token not found')
            security_token = None

        print(cst, security_token)

# don't need a searchfile.close() at the end
0 голосов
/ 21 апреля 2020

Для JSON форматированных файлов рекомендуется использовать библиотеку для обработки чтения.

json.load(file) вернет тип словаря. file должен поддерживать метод .read().

Чтение файла JSON очень просто:

import json
with open('filepath.txt','r') as f:
    fileDict = json.load(f)

Затем вы можете получить доступ к любой паре ключ-значение, как с обычным python словарь с использованием dict[key], например:

print(fileDict["CST"])

Более подробную информацию можно найти в документах , например, используя json.loads(str) для преобразования строки (вместо файл) в словарь.

...