我有一个Python程序prog1(mapper)在三个字段中打印出来。它以
结尾 print user, text, rt
第一个字段是用户名。其次是推文。第三是转发#。试图找出TopN转推
以下是一个例子
inocybetech RT @ONAPproject: #ONAPAmsterdam is here! This first code release delivers a unified architecture for end-to-end, closed-loop… 5
jchawki RT @ONAPproject: #ONAPAmsterdam is here! This first code release delivers a unified architecture for end-to-end, closed-loop… 6
jchawki RT @opnfv: Congrats to @ONAPproject on Amsterdam, on its 1st platform release! Learn more about its unified architecture for e… 2
jchawki RT @jzemlin: Now Available! #ONAP Amsterdam brings globally shared implementation for network automation, based on OSS & open st… 3
jchawki RT @bdwick: Now Available! #ONAP Amsterdam brings globally shared implementation for network automation, based on OSS & open st… 1
我通过stdin将它传递给另一个Python程序prog2(reducer)。我的问题是弄清楚如何将其读入一个包含两个键(用户和文本)和值(转发)的字典
如果我说
for line in sys.stdin
行没有捕获整个字符串。我需要做的是捕获字典中的三个字段,其中包含两个键和一个值。
你能说点什么吗?我刚开始学习Python由于
答案 0 :(得分:1)
使用更易于解析的格式可能更好。如果您打印的所有内容都是以空格分隔的,那么之后分隔各个字段可能会非常复杂,因为推文的文本包含空格(甚至可能是换行符)。
一种选择是生成/解析CSV(这样做的另一个好处是,您可以轻松地将输出用于支持CSV输入的其他软件)。
所以作者(csvw.py
)可以用松散的术语表示:
import csv
import sys
writer = csv.writer(sys.stdout, delimiter = ' ')
writer.writerow(['Name', 'Content\nof the message', 12])
和读者(csvr.py
):
import csv
import sys
reader = csv.reader(sys.stdin, delimiter = ' ')
stat = {}
for record in reader:
name, message, cnt = record
key = (name, message)
stat[key] = int(cnt)
print(stat)
然后如果你这样做:
python csvw.py | python csvr.py
你得到:
{('Name', 'Content\nof the message'): 12}