在大型csv python上循环

2024-09-30 02:27:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这个csv文件包含几个double,因为服务器名是来自集群的服务器名(总是相同的一对)和站点名的语言别名(例如mijnhuis、myhouse、mamaison)

我希望得到的结果如下(注意;和,:
文件名;站点名称1、站点名称2、站点名称3;服务器名称1、服务器名称2、服务器名称3;

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

附言:实际的代码会很好,但如果你能给我指示,我会同样高兴。你知道吗


Tags: 文件csv服务器名称语言站点文件名方式
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]))

您的数据结构取决于您的程序。也许你也可以储存 一个文件名字典到一个元组列表(sitename1, servname2)有很多方法可以完成你想要做的事情

你可以这样做:

import csv

file_names_to_data = {}

with open('your_csv') as f:
   reader = csv.reader(f)
   for line_list in reader:
      try:      
        file_names_to_data[line_list[0]]['sitenames'].append(line_list[1])
        file_names_to_data[line_list[0]]['servernames'].append(line_list[2])
      except KeyError:
        # initialize it
        file_names_to_data[line_list[0]] = {'sitenames': [line_list[1]], 'servernames': [line_list[2]]}

此外,它看起来defaultdict可能非常有用。你知道吗

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

相关问题 更多 >

    热门问题