【问题标题】:python parsing input, making a sum of the inputpython解析输入,对输入求和
【发布时间】:2013-12-05 17:50:41
【问题描述】:

我正在尝试解析具有以下格式的文件

1999
I
Willem Jan van Steen         9859  77
Guillaume Kielmann           5264  77
Guillaume Bos                8200   6

(文件更长,并且按学年(如 1999 年)和不同的研究(如“I”)分开。我唯一需要处理的是最后一个数字(如 77、77、6)这个数字是一个百分比。最终目标是制作一个由 10 个条形图组成的条形图,条形图由文件中某个百分比落入条形图范围的次数(总和)组成(比如来自70 到 80 % --> 如果上面的输入是整个文件,那么总和为 2,条形图的高度为 2。但我的第一个问题是我不知道如何解析输入。我在想那个python应该读取这些行,然后从百分比数字开始对数字“做某事”的索引(因此创建一个范围)中读取(->查看它们落在条形图的哪个范围内,然后为百分比在该条形图中下降多少次的总和..)

希望有人可以帮助我!

【问题讨论】:

  • 欢迎来到 Stack Overflow!看起来您希望我们为您编写一些代码。虽然许多用户愿意为陷入困境的编码人员编写代码,但他们通常只有在发布者已经尝试自己解决问题时才会提供帮助。展示这项工作的一个好方法是包含您迄今为止编写的代码、示例输入(如果有的话)、预期输出和您实际获得的输出(控制台输出、堆栈跟踪、编译器错误 - 不管是什么适用的)。您提供的详细信息越多,您可能收到的答案就越多。检查FAQHow to Ask

标签: python parsing loops percentage readlines


【解决方案1】:

使用str.rsplit() 将字符串拆分为单词,从右数开始。如果您传入None,它将拆分为任意宽度的空白,为您提供整齐的剥离字符串和一个计数,让您在第一列中保留空白。

这意味着什么的简短演示:

>>> 'Willem Jan van Steen         9859  77\n'.rsplit(None, 2)
['Willem Jan van Steen', '9859', '77']

这里名称中的空格被保留,但末尾的两个数字现在是列表中的单独元素。最后的换行符不见了。

如果你遍历一个打开的文件对象,你会得到单独的行,为你提供一种逐行解析文件的方法:

with open(inputfilename) as inputfh:
    for line in inputfh:
        columns = line.rsplit(None, 2)
        if len(columns) < 3:
            continue  # not a line with name and numbers
        percentage = int(columns[2])
        if 70 <= percentage <= 80:
            # we have a line that falls within your criteria

【讨论】:

    猜你喜欢
    • 2022-09-28
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2014-11-21
    相关资源
    最近更新 更多