【问题标题】:rearrange a xref / csv by column 1 and header row按第 1 列和标题行重新排列外部参照/csv
【发布时间】:2017-05-17 13:39:03
【问题描述】:

希望以前有人可能遇到过这种事情......我在 Linux 服务器上有一个 csv 文件,我需要将它“按摩”成一种格式,我可以在另一个产品中用作查找表。当前的文件格式不适合这个其他产品,所以我希望将数据重新排列成我可以使用的东西。

我曾尝试使用 bash 脚本但没有取得太大的成功(主要是性能),但我怀疑,由于我对该语言的了解非常有限,Python 会是一个更好的候选者。

我拥有的当前文件有一个标题行,第一列是日期,即

Date,USD,JPY,BGN,CYP,
2017-04-28,1.093,121.76,1.9558,26.922,
2017-04-27,1.0881,121.27,1.9558,26.937,

(这是一个非常简化的示例!实际上,有 43 列和 4,600 行)

我的目标是创建一个看起来像...的输出文件

Date, Currency, FX_Rate
2017-04-28, USD, 1.093
2017-04-28, JPY, 121.76
2017-04-28, BGN, 1.9558
2017-04-28, CYP, 26.922
2017-04-27, USD, 1.0881
2017-04-27, JPY, 121.27
2017-04-27, BGN, 1.9558
2017-04-27, CYP, 26.937

(空格无关紧要 - 我只是添加它们以尝试使其更清晰)

感谢您提供的任何帮助,

标记。

【问题讨论】:

    标签: python linux bash csv


    【解决方案1】:

    这可以使用 Python 内置的 csv 库来完成。以下内容适用于 Python 2.x 安装。

    import csv
    
    with open('input.csv', 'rb') as f_input, open('output.csv', 'wb') as f_output:
        csv_input = csv.reader(f_input)
        csv_output = csv.writer(f_output)
    
        header = next(csv_input)
        csv_output.writerow(["Date", "Currency", "FX_Rate"])
    
        for row in csv_input:
            date = row[0]
    
            for index, currency in enumerate(row[1:], start=1):
                csv_output.writerow([date, header[index], currency])
    

    给你:

    Date,Currency,FX_Rate
    2017-04-28,USD,1.093
    2017-04-28,JPY,121.76
    2017-04-28,BGN,1.9558
    2017-04-28,CYP,26.922
    2017-04-27,USD,1.0881
    2017-04-27,JPY,121.27
    2017-04-27,BGN,1.9558
    2017-04-27,CYP,26.937
    

    如果使用的是 Python 3,则需要进行如下更改:

    with open('input.csv', newline='') as f_input, open('output.csv', 'w', newline='') as f_output:    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多