Python删除尖括号并从stdin解析为正确格式?

Python删除尖括号并从stdin解析为正确格式?,python,json,date,datetime,stdin,Python,Json,Date,Datetime,Stdin,这是我在stackoverflow上的第一篇文章,我正在为学校做一个编程作业,并且正在解决以下问题,我一直在努力 编写一个程序,从STDIN读入事件并将事件输出回tostout,对于与其他事件重叠的事件,翻转“重叠”标志。输入的第一行将是后续事件的数量,N.N将是100万或更多。后续N行将包含以下格式的事件: { ‘start_time’: string format, ‘end_time’: string format, ‘overlap’: boolean represented as 1

这是我在stackoverflow上的第一篇文章,我正在为学校做一个编程作业,并且正在解决以下问题,我一直在努力

编写一个程序,从STDIN读入事件并将事件输出回tostout,对于与其他事件重叠的事件,翻转“重叠”标志。输入的第一行将是后续事件的数量,N.N将是100万或更多。后续N行将包含以下格式的事件:

{ ‘start_time’: string format, ‘end_time’: string format, ‘overlap’: boolean represented as 1 or 0 }
样本输入:

{ ‘start_time’: “2016-01-01 00:00:00”, ‘end_time’: “2016-05-01 00:00:00”, ‘overlap’: 0}
{ ‘start_time’: “2016-02-01 00:00:00”, ‘end_time’: “2016-06-01 00:00:00”, ‘overlap’: 0}
{ ‘start_time’: “2012-01-01 00:00:00”, ‘end_time’: “2012-05-01 00:00:00”, ‘overlap’: 0}
样本输出:

{ ‘start_time’: “2016-01-01 00:00:00”, ‘end_time’: “2016-05-01 00:00:00”, ‘overlap’: 1}
{ ‘start_time’: “2016-02-01 00:00:00”, ‘end_time’: “2016-06-01 00:00:00”, ‘overlap’: 1}
{ ‘start_time’: “2012-01-01 00:00:00”, ‘end_time’: “2012-05-01 00:00:00”, ‘overlap’: 0}
输入将在一个“timestamp.txt”中给出,我将使用python io库读取该文件,然后将这些行输入到一个数组中,并使用sorted()方法或.sort()方法按时间戳顺序对这些行进行排序, 一旦我有了一个排序数组,我就会比较每个连续事件的结束时间和开始时间,看看第一个事件的结束时间和第二个事件的开始时间是否有重叠

我目前一直关注的是如何从每行文本中实际检索值

因为文件的格式是

{ ‘start_time’: “2016-01-01 00:00:00”, ‘end_time’: “2016-05-01 00:00:00”, ‘overlap’: 0}
它不完全是json格式,所以我不能像line=json.loads(line)那样通过line['start_time']获取值


有人对这个习题集有什么建议吗?多谢各位

您是否尝试过在开始和结束时剥离角括号,使其看起来像:
“开始时间”:“2016-01-01 00:00:00”,“结束时间”:“2016-05-01 00:00:00”,“重叠”:0

操作完成后,可以从中将结果字符串拆分为字符串列表

< P>因为你的输入的每一行已经在DICT的RPR格式中,考虑使用AST模块加载。ast是python的抽象语法树,有助于将编写的代码(字符串)转换为python语法

    import ast

    #your code to read the file here
    for line in file:
     DoProcessing(ast.literal_eval(line))

回答了一个类似的问题。

看起来像带有奇怪引号字符的json。查看数据源以查看是否打算使用有效的json以及这些引号在何处转换为扩展的unicode引号将非常有用。也许有人正在通过文字处理器运行这些。或者有一些windows代码页到unicode的翻译问题

无论如何,您可以修复引号,并且(至少对于您的小示例而言)解析工作正常

fix_quote_transform = str.maketrans({q:'"' for q in '‘”’“'})
for line in sys.stdin:
    obj = json.loads(line.trans(fix_quote_transform))