@denislysenko
data engineer

Как sys.stdin, который выглядит как словарь превратить в словарь?

sys.stdin выглядит так:
{'Action': ['Terminal Velocity;1994', 'Terminator 2: Judgment Day;1991', 'Terminator, The;1984', 'Terminator 3: Rise of the Machines;2003', 'Terminator Salvation;2009', 'Terminator Genisys;2015'], 'Mystery': ['Terminal Velocity;1994'], 'Thriller': ['Terminal Velocity;1994', 'Terminator, The;1984', 'Terminator Salvation;2009', 'Terminator Genisys;2015'], 'Sci-Fi': ['Terminator 2: Judgment Day;1991', 'Terminator, The;1984', 'Terminator 3: Rise of the Machines;2003', 'Terminator Salvation;2009', 'Terminator Genisys;2015'], 'Adventure': ['Terminator 3: Rise of the Machines;2003', 'Terminator Salvation;2009', 'Terminator Genisys;2015'], 'Comedy': ['Terminal, The;2004'], 'Drama': ['Terminal, The;2004'], 'Romance': ['Terminal, The;2004']}

мне нужно дальше использовать этот словарь
как мне его превратить в переменную с типом dict?
вот мой код
# sort.py 

import sys
import json

def dict_sorted_by_genre(dict_data):
    # sort genres by alphabetically
    sorted_result = sorted(dict_data.items(), key=lambda x: x[0])
    dict_result = dict(sorted_result)
    return dict_result


if __name__ == "__main__":
    dict = json.loads(str(sys.stdin))
    sorted_dict = dict_sorted_by_genre(dict)
    print(sorted_dict)


это запуск команды:
denislysenko@MacBook-Pro-Denis homework5 % cat files/movies.csv | python3 mapper.py -regexp Termi | python3 shuffle.py | python3 sort.py

выскакивает вот такая ошибка:
Traceback (most recent call last):
File "/Users/denislysenko/Desktop/Intern/coherent-training-denis-lysenko/homework5/sort.py", line 12, in
dict = json.loads(str(sys.stdin))
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Exception ignored in: <_io.TextIOWrapper name='' mode='w' encoding='utf-8'>
BrokenPipeError: [Errno 32] Broken pipe
  • Вопрос задан
  • 153 просмотра
Решения вопроса 2
Vindicar
@Vindicar
RTFM!
Ты пробовал вывести str(sys.stdin) на экран?
>>> str(sys.stdin)
"<_io.TextIOWrapper name='<stdin>' mode='r' encoding='utf-8'>"


sys.stdin - это файл, открытый в текстовом режиме. Работай с ним как с файлом.
Ответ написан
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Так делать нельзя:
dict = json.loads(str(sys.stdin))
Нужно либо так:
dict = json.load(sys.stdin)
либо так:
dict = json.loads(sys.stdin.read())
Приведите остальной код тоже. Там наверняка такие же ошибки.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы