2015-03-28 1 views
0

У меня есть набор файлов в формате JSON, который содержит некоторые information.The ниже данных значение для ключа «BrowserInfo'.I хотите извлечь следующую информацию Title, Links, Browser , Platform, CPUs из приведенного ниже, добавьте вышеуказанные поля в виде ключей в файле JSON и извлеките их значения и назначьте эти ключи.Добавление новых пар ключ-значение в JSON файлов с помощью Python

Название: Worlds best websit | mywebsite.com
Ссылки: 225
Браузер: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537,36 Ubuntu Хром/41.0.2272.76 Хром/41.0.2272.76 Сафари/537,36
Платформа: Linux x86_64
процессоры: 8

Я попросите программу python спуститься в каталог и извлеките значение «BrowserInfo» из файлов JSON.

# Set the directory you want to start from 
rootDir = '/home/space' 
for dirName, subdirList, fileList in os.walk(rootDir): 
    print('Found directory: %s' % dirName) 
    for fname in fileList: 
     fname='space/'+fname 
     with open(fname, 'r+') as f: 
      json_data = json.load(f) 
      BrowserInfo = json_data['BrowserInfo'] 
      print(BrowserInfo) 

Как извлечь значения и добавить новые пары ключ-значение в файлы JSON с помощью Python.

+0

Что случилось с кодом у вас есть? – KSFT

+0

@KSFT - Я хочу извлечь индейскую информацию из «BrowserInfo» и добавить их в новые пары значений ключей в файлы JSON. – liv2hak

+1

Что случилось с чем-то вроде 'json_data [BrowserInfo.key] = BrowserInfo.value'? – KSFT

ответ

1

Предполагая, (и это кажется большим предположением), что BrowserInfo содержит символ новой строки, разделенные клавиши, пары значений, разделенных ': ', вы можете извлечь ключи/значения с:

for line in BrowserInfo.splitlines(): 
    k,v = line.split(': ', 1) 

Тогда просто вставить их туда, куда вы хотите в словаре, например:

json_data['BrowserInfo'] = {} 
for line in BrowserInfo.splitlines(): 
    k,v = line.split(': ', 1) 
    json_data['BrowserInfo'][k] = v 
+0

Я прочитал файл, используя json.load(), назначив json_data [] записать его обратно в файл? – liv2hak

+1

@ liv2hak Нет, к сожалению, вам придется переписать объект в файл с чем-то вроде 'json.dump'. – jedwards

+0

, когда я использую разделительные линии, как я отбрасываю одну строку? например, первая строка? – liv2hak

0

быстрый демо для синтаксического анализа

>>>import re, itertools 

>>> BrowserInfo 
'Title: Worlds best websit | mywebsite.com\nLinks: 225\nBrowser: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Ubuntu Chromium/41.0.2272.76 Chrome/41.0.2272.76 Safari/537.36\nPlatform: Linux x86_64\nCPUs: 8' 

>>> re.split(':|\n', BrowserInfo) 
['Title', ' Worlds best websit | mywebsite.com', 'Links', ' 225', 'Browser', ' Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Ubuntu Chromium/41.0.2272.76 Chrome/41.0.2272.76 Safari/537.36', 'Platform', ' Linux x86_64', 'CPUs', ' 8'] 

>>> s = re.split(':|\n', BrowserInfo) 
>>> {pair[0].strip():pair[1].strip() for pair in itertools.izip(s[::2], s[1::2])} 
{'Platform': 'Linux x86_64', 'Browser': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 Ubuntu Chromium/41.0.2272.76 Chrome/41.0.2272.76 Safari/537.36', 'CPUs': '8', 'Links': '225', 'Title': 'Worlds best websit | mywebsite.com'} 

Таким образом

json_data['BrowserInfo'] = {pair[0].strip():pair[1].strip() for pair in itertools.izip(s[::2], s[1::2])} 

будет ваш JSON

Смежные вопросы