【问题标题】:Put Data into Columns of CSV based on what list it is in - Python根据数据所在的列表将数据放入 CSV 的列中 - Python
【发布时间】:2019-02-17 10:42:15
【问题描述】:

我的脚本中有两个列表 - vulnsites 和 notvulnsites,它们包含一个被识别为包含漏洞的站点列表。我想将这些写到 CSV 的两个单独列中 - 易受攻击的站点和误报。我目前有以下代码:

    with open (outputfile, 'w') as outfile:
    writer = csv.writer(outfile, delimiter=',',quotechar='"', quoting=csv.QUOTE_MINIMAL)
    fields = ['Vulnerable Sites', 'False Positives']
    writer.writerows([fields])

    for val in vulnsites:
        writer.writerow([val])

    for val in notvulnsites:
        writer.writerow([val]])

目前,这些字段在 Excel 中创建为 A1 和 B1。当我写入数据时,所有站点都被转储到 Excel 的“A”列中,无论它们在哪个列表中。我该如何纠正这个问题?

编辑:根据 Daniel 对使用 Panda 的 DataFrames 的建议和他的帮助,我想出了以下代码来解决这个问题:

CSVOut = {'Vulnerable Sites':vulnsites,'False Positives':notvulnsites}
df = pd.DataFrame.from_dict(CSVOut, orient='index')
df.to_csv(outputfile)

【问题讨论】:

    标签: python pandas list csv


    【解决方案1】:

    您有两个名为 vulnsitesnotvulnsites 的列表,并且想要将它们转储到 csv 文件中?

    这说明了两个字符串可能的不同长度:

    import pandas as pd
    df_a = pd.DataFrame({'vulnerable':vulnsites})
    df_b = pd.DataFrame({'not_vulnerable':notvulnsites})
    df = pd.concat([df_a,df_b],axis=1)
    df.to_csv('data.csv')
    

    双线版本,可读性较差但等效:

    import pandas as pd
    pd.concat([pd.DataFrame({'vulnerable':vulnsites}),pd.DataFrame({'not_vulnerable':notvulnsites})],axis=1).to_csv('data.csv')
    

    【讨论】:

    • 不幸的是,此解决方案要求所有列表的长度相同,并且鉴于上下文,这是不可预测的。我会玩这个,看看我能不能让它工作。
    • 已更新,这说明了尺寸差异
    • 我最终选择了一个不同的解决方案,我将用它来编辑我的帖子,但我标记了这个最佳答案,因为它回答了 99% 的问题!
    • 我将编辑答案,以便仅显示最终解决方案。
    • 那么 csv 不是您选择的格式。 csv 的想法是每行包含几个值,每列共享相同的描述或类型。例如,如果误报列表是易受攻击网站的子集,那么您可以在文件中写入两列:一列可能是 URL,另一列是 ISFALSEPOS,您只需列出布尔值 True 和 False。那么根据定义,您的列将同样长,这就是 csv 适合的数据。
    猜你喜欢
    • 1970-01-01
    • 2014-12-31
    • 2017-08-19
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 2014-01-23
    • 2021-09-21
    • 2021-05-04
    相关资源
    最近更新 更多