【问题标题】:create csv from different files using python使用 python 从不同的文件创建 csv
【发布时间】:2017-11-07 08:53:16
【问题描述】:

我有 2 个通过 python 生成的 csv 文件。记录如下(a.csv 和 b.csv)。 b.csv 有 2 行,第二行中的值可以重复。我想要像final.csv 这样的结果。我怎样才能做到这一点?

我尝试了下面的代码,但这是不对的。我没有做正确的比较。任何帮助都会很棒。

a.csv

"all","1","1Gi","4","8Gi"
"als","0","0","100m","128Mi"
"awx","6","9Gi","20","32Gi"
"cho-1","9","9728Mi","15","20Gi"
"cho-2","12250m","15395Mi","20","24Gi"

b.csv

"all","ABC"
"als","ABC"
"awx","DPL"
"cho-1","ABC"
"cho-2","ABC"
"cho-3","ABC"

我想从下面两个文件中创建一个文件

final.csv

"all","1","1Gi","4","8Gi","ABC"
"als","0","0","100m","128Mi","ABC"
"awx","6","9Gi","20","32Gi","DPL"
"cho-1","9","9728Mi","15","20Gi","ABC"
"cho-2","12250m","15395Mi","20","24Gi","ABC"

我的代码:

csv1 = csv.reader(open("reports/a.csv", "r"))
csv2 = csv.reader(open("reports/b.csv", "r"))
s=[]

while True:
    try:
        line1 = csv1.next()
        line2 = csv2.next()

        if (line1[0] == line2[0]):
            s.append([line1[1], line2[0], line2[1], line2[2], line2[3], line2[4]])
        else:
            s.append(["NA", line2[0], line2[1], line2[2], line2[3], line2[4]])
    except StopIteration:
        break

【问题讨论】:

    标签: python python-2.7 csv


    【解决方案1】:

    在这种情况下,我得到了 pandas 的帮助。

    df0 = pd.read_csv("a.csv")
    df1 = pd.read_csv("b.csv")
    df1=df1.dropna(axis=1)
    df1 = df1.merge(df0, on='Name', how='outer')
    df1.to_csv("final.csv", index=True)
    

    【讨论】:

      【解决方案2】:

      根据您的预期输出,我认为您应该使用 set.由于 line1 和 line2 变量包含逗号分隔的值,您可以从这些值中创建一个列表。喜欢,

      line1 = ["all","1","1Gi","4","8Gi"]
      line2 = ["all","ABC"]
      

      然后您可以合并这两个列表以形成一个列表并从中创建一个集合。所以这个集合看起来像,

      set1 = set(line1.extend(line2))
      

      制作一个集合将删除重复项。 希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        您离解决方案不远了,您只需将数据从 line2 附加到 line1 并使用它:

        ...
        csvout = csv.writer(open("final.csv", "wb"), quoting = csv.QUOTE_ALL)
        while True:
            try:
                line1 = csv1.next()
                line2 = csv2.next()
                if line1[0] != line2[0]:    # control same first field
                    raise Exception("Desynch", line1[0], '#', line2[0])
                line1.append(line2[1])      # append field from b.csv
                csvout.writerow(line1)      # and write it to final.csv
            except StopIteration:
                break
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多