Как напечатать только имя в этом объекте JSON в Python 3.8

#python #json

Вопрос:

Предисловие — Я нахожусь на очень ранних стадиях изучения python, поэтому, возможно, не знаю точно, что искать в Google. В течение последнего дня или около того я искал идеи, которые близки, но не стремился решить эту проблему.

Это пример объекта:

«адрес отправки_адрес»: «Джон Доуn234 NE Asdf St.нАсдф Таун, штат Орегон, 14423Соединенные Штатыnn Телефон: 555-555-2733nPaypal адрес: asdf@example.com»,

Как мне просто распечатать раздел «Неизвестный», а не остальную информацию? Когда я пытаюсь распечатать до » » (минус пробелы) Кажется, я не могу заставить это работать. Это потому, что является оператором?

Любой вклад был бы чрезвычайно полезен.

отрывок:

 response = requests.get(url).json()
print('Number of orders: ' str(len(response['orders'])))
print()
for order in response['orders']:
    name = order['shipping_address']
    print(name)
    print()
 

Комментарии:

1. name = name.split("n")[0]

2. Обратите внимание, что строковое представление новой строки является экранированным n . т. е. «n». При печати строкового представления они отображают его в виде двух символов, но на самом деле n это один символ в строке.

Ответ №1:

Я предполагаю, что заказ-это диктат, вы уже получаете текст, который нам нужно обнаружить в разделе «адрес отправки_адрес», а для адреса слова разделены символом «n», если это так, было бы очень просто просто использовать метод разделения.

person_name = order['shipping_address'].split("n")[0]

Во всех остальных случаях, когда адрес доставки не имеет определенного отличительного признака, такого как конец строки («n»), вы можете использовать модуль spacy NER для определения имени человека. Как уже упоминалось ниже.

 import spacy
shipping_address =  "John Doen234 NE Asdf St.nAsdf Town, Oregon, 14423nUnited StatesnnPhone: 555-555-2733nPaypal address: asdf@example.com"
nlp = spacy.load('en_core_web_sm')
doc = nlp(shipping_address)
person_name = [ ent for ent in doc.ents if ent.label_ == "PERSON" ]
 

печать(имя пользователя)

[Неизвестный]

Для установки spacy, пожалуйста, следуйте официальному руководству

Ответ №2:

Вы можете попробовать разделить имена по новой строке (‘n’) и получить доступ к части Неизвестного по индексу.

 response = requests.get(url).json()
print('Number of orders: ' str(len(response['orders'])))
print()
for order in response['orders']:
    name = order['shipping_address']
    print(name.split('n')[0])
    print()
 

Ответ №3:

Вам нужно разделить строку на символ новой строки ( n ). Один из способов сделать это- .split() метод, который возвращает список строк, разделенных на заданную строку. Например:

 x = 'This-is-an-example'
print(x.split('-'))
// Result: ['This', 'is', 'an', 'example']
 

Что вы хотите сделать, так это разделить символ новой строки и взять первый элемент этого списка в качестве имени. Это было бы:

 response = requests.get(url).json()
print('Number of orders: ' str(len(response['orders'])))
print()
for order in response['orders']:
    shipping_address = order['shipping_address']
    name = shipping_address.split('n')[0]
    print(name)
    print()
 

Комментарии:

1. Большое спасибо! Полностью пропустил функцию разделения. Это очень помогает!

Ответ №4:

Я думаю, что вы путаете символ » «и escape-последовательность «n».

Оба они представляют собой один и тот же символ. «»представляет фактический символ обратной косой черты, который вы получаете при нажатии клавиши на клавиатуре.

С другой стороны, «n » — это escape-последовательность для символа новой строки, который вы получаете при нажатии Enter на клавиатуре.

Если вы хотите получить первую строку строки, вам нужно разделить строку до тех пор, пока первый символ новой строки не станет первой обратной косой чертой. Ты делаешь это вот так:

 order['shipping_address'].split('n')[0]