python - 按第 1 列和标题行重新排列外部参照/csv

标签 python linux bash csv

希望有人以前遇到过这种事情......我在 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 内置的 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:    

关于python - 按第 1 列和标题行重新排列外部参照/csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44026544/

相关文章:

linux - openLdap BerkleyDB 编译问题

bash 根据真实文件创建虚拟文件和文件夹

bash - crontab 上的备份脚本不起作用

python - Bing Congitive Web 搜索 API 与 Python 3

python - Keras:期望 3 维,但得到具有形状的数组 - 密集模型

python - 不使用 setuptools 解析 setup.py

bash - gsutil cli 工具是否支持 JSON 输出?

Python:为什么我的 Slack-Bot 在 CMD 中不工作?

linux - 为 Redhat Linux 安装 MonoDevelop IDE

c++ - 使用管道通过 TTY、PTY 或 execv() 运行 shell(例如 sh)之间有什么区别?