【问题标题】:I have a file with this data我有一个包含这些数据的文件
【发布时间】:2012-09-27 01:23:17
【问题描述】:

2012-05-10 布拉德 10
2012-05-08 布拉德 40
2012-05-08 布拉德 60 >
2012-05-12 TOM 100
我想要输出为
2012-05-08 BRAD|2|100
2012-05-10 BRAD|1|10
2012-05-12 TOM|1|100

我从这段代码开始::

import os,sys
fo=open("meawoo.txt","w")
f=open("test.txt","r")
fn=f.readlines()
f.close()
for line in fn:
    line = line.strip()
    sline = line.split("|")
    p = sline[1].split(" ")[0],sline[2],sline[4]
    print p
    fo.writelines(str(p)+"\n")
fo.close()
o_read = open("meawoo.txt","r")
x_read=o_read.readlines()
from operator import itemgetter
x_read.sort(key=itemgetter(0))
from itertools import groupby
z = groupby(x_read, itemgetter(0))
print z
for elt, items in groupby(x_read, itemgetter(0)):
    print elt, items
    for i in items:
        print i

It will be very helpful if u suggest me some usefull changes to my work.TIA

【问题讨论】:

  • 用文字更准确地描述您要完成的工作。你还说你有一个文件,但你的代码打开了两个文件。
  • 只要告诉我我是否有一个数据为:: 2012-05-10 BRAD 6 2012-05-10 BRAD 4 2012-05-08 BRAD 20 我如何得到这个:: 2012 -05-08 BRAD|1|20 2012-05-10 BRAD|2|10 即 Groupby DATE Groupby NAME|Len(NAME)|SUM(VALUES)

标签: python string string-parsing group-by


【解决方案1】:

以下代码应该以您想要的格式打印数据(据我所知):

d = {}
with open("testdata.txt") as f:
    for line in f:
        parts = line.split()
        if parts[0] in d:
            if parts[1] in d[parts[0]]:
                d[parts[0]][parts[1]][0] += int(parts[2])
            else:
                d[parts[0]][parts[1]] = [int(parts[2]), 0]
            d[parts[0]][parts[1]][1] +=1
        else:
            d[parts[0]] = {parts[1]: [int(parts[2]), 1]}
    for date in sorted(d):
        for name in sorted(d[date]):
            print "%s %s|%d|%d" % (date, name, d[date][name][0], d[date][name][1])

我将每一行保存在字典中,以行的日期为键,值是另一个字典,以名称为键,值是一个包含两个元素的列表:第一个是这个日期到这一行的这个名字,第二个是这个日期/名字星座的总和数。然后我以您要求的格式打印字典,并使用两个日期的比较给出的结果与将日期比较为格式为 YYY-MM-DD 的字符串的结果相同的情况,所以我可以只使用 sorted 函数日期字符串。我也按名字排序。

有关示例(适用于无法使用文件),请参阅http://ideone.com/rx3h2。它提供了您要求的相同输出。

【讨论】:

  • 嗨,谢谢,但由于我是 python 新手,我只是想问它是否是一个文件,我必须迭代然后对它们进行分组,然后你会建议我进行哪些更改。
  • 上面的代码应该适用于名称为testdata的文件。
  • 嘿检查在文件中再添加一行,你会发现新的东西:: 添加这一行 :: 2012-05-10 SIM 100
  • @Abhineet 50 种 Python 阴影 :)
  • @halex +1 为您的耐心伙伴。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 2011-04-05
  • 1970-01-01
  • 2018-03-17
  • 2013-03-08
相关资源
最近更新 更多