-3

我有一个包含以下结构的大型 csv 文件(数百行):
文件名、站点名、服务器名

此 csv 文件包含多个双精度值,因为服务器名称来自集群(总是相同的一对)和站点名称的语言别名(例如 mijnhuis、myhouse、mamaison)

我想要的结果如下(注意 ; 和 , :
filename; sitename1, sitename2, sitename3; servername1, servername2, servername3;

我怎样才能以最优化的方式做到这一点?

PS:实际的代码会很好,但如果你能给我指路,我会同样高兴。

4

4 回答 4

3

使用风险自负:

import collections as c

f = open('input', 'r')
sites, servers = c.defaultdict(set), c.defaultdict(set)
files = set()
for line in f:
    parts = line.split(',')
    fi,site,server = [p.strip() for p in parts]
    files.add(fi)
    sites[fi].add(site)
    servers[fi].add(server)

for f in files:
    print "%s; %s; %s" % (f, ", ".join(sites[f]), ", ".join(servers[f]))
于 2012-10-16T17:08:35.747 回答
2
于 2012-10-16T17:06:53.237 回答
1

使用字典作为文件名,并为每个字典项使用 2 个站点名和服务器名列表

于 2012-10-16T17:00:55.503 回答
0

碰巧,这里包括我的问题的解决方案。示例文件包括在内。

代码:

fp = r'PATH_TO_FILE'

aliases = []
aliases.append(("sitex","sitez","sitey"))


splitFile = []
for l in open(fp):
    parts = tuple(l[:-1].replace(" ","").split(","))
    splitFile.append(parts)

def isAlias(old, new):
    print old, new
    aliasFound = False
    for alias in aliases:
        if old in alias and new in alias:
            aliasFound = True

    return aliasFound

handledSites = []
for split in splitFile:
    log = split[0]
    site = split[1]
    rp = split[2]


    matchFound = False
    for hs in handledSites:
        if site in hs[0]:
            matchFound = True
            if rp not in hs[1]:
                hs[1].append(rp)
            if log not in hs[2]:
                hs[2].append(log)
        if not matchFound:
            if isAlias(hs[0][0], site):
                matchFound = True
                hs[0].append(site)
                if rp not in hs[1]:
                    hs[1].append(rp)
                if log not in hs[2]:
                    hs[2].append(log)
    if not matchFound:
        handledSites.append(([site],[rp],[log]))

for s in handledSites:
    print s

示例文件

logfile[date]_[server]_sitex.log, sitex, rp1
logfile[date]_[server]_sitex.log, sitex, rp2
logfile[date]_[server]_sitey.log, sitey, rp1
logfile[date]_[server]_sitey.log, sitey, rp2
logfile[date]_[server]_sitez.log, sitez, rp1
logfile[date]_[server]_sitez.log, sitez, rp2
logfile[date]_[server]_site3.log, site3, rp1
logfile[date]_[server]_site3.log, site3, rp2
于 2012-10-16T18:50:01.713 回答