0

我有来自系统的愚蠢数据,它需要被展平。

主 csv 有这些列:主机名、程序名、版本名

但是,每个主机只有一行,所以最后两个字段如下所示:

程序名内容

Word
Excel
Cognos
Mozilla

版本内容(不是真实的,仅用于说明目的)

2.3.2
121.3.0
build 22

确保事情匹配并更简洁和 python 地做到这一点的最佳方法是什么。

这是真实代码的样子,上面主要是为了演示目的:

for row in tan_output.programs:
    names = row["Name"].splitlines()
    versions = row["Version"].splitlines()
    if(len(names) != len(versions)):
        print("NAME and VERSION from tan_programs are not equal... Exiting")
        exit()
    else:
        for name in names:
            #tan_programs.append({"Count": row["Count"], "Hostname": row["Hostname"], "Name": row["Name"], "Version": row["Version"]})

我被困在 for 循环的底部,因为我觉得我应该同时循环通过两个列表而不是循环通过一个,然后我要做什么,使用计数器来引用第二个并形成扁平数据。

PS,文件是 7 gigs ......所以效率越高越好例如如果我必须使用计数器,我从经验中知道 i += 1 比 i = i + 1 效率高 100 倍

4

1 回答 1

0

只需使用计数器...除非有人有更好的主意:

tan_programs = []
for row in tan_output.programs:
    names = row["Name"].splitlines()
    versions = row["Version"].splitlines()
    if(len(names) != len(versions)):
        print("NAME and VERSION from tan_programs are not equal... Exiting")
        exit()
    else:
        i = 0
        for name in names:
            tan_programs.append({"Hostname": row["Hostname"], "Name": name, "Version": versions[i]})
            i += 1

它实际上非常快......慢的部分是通过网络将 800 万条记录插入到另一台服务器上的数据库中。

于 2018-02-01T13:45:28.443 回答