python - 在 bash 脚本中使用 csvkit 将 CSV 转换为所需的格式?
问题描述
我需要将一个大的 csv 文件转换为 Kirby CMS 的静态内容格式。
假设我有一个 csv 文件:
id,name,age,bio
0,bob,25,"Example bio, with a comma"
1,sam,37,"Hello World"
...
我想重组为单独的文件夹/文件,如下所示:
1_bob/person.txt
ID: 0
----
Name: bob
----
Age: 25
----
Bio: Example bio, with a comma
2_sam/person.txt
ID: 1
----
Name: sam
----
Age: 37
----
Bio: Hello World
ETC...
这显然是我的数据的一个更加简化的版本,因此我考虑过使用csvkit
它,因为它能够正确解析引用字段等中的逗号。
我找到了这个脚本:https://forum.getkirby.com/t/import-from-csv/6038/15由于上述问题而失败(基本 bash IFS 无法读取更复杂的 CSV 数据)
#!/bin/bash
OLDIFS=$IFS
IFS=";"
while read number year title website slug
do
if [ ! -d "$number-$slug" ]; then
mkdir ./$number-$slug
fi
echo -e "Year: $year\n----\nTitle: $title\n----\nWebsite: $website" > $number-$slug/project.txt
done < projects.csv
IFS=$OLDIFS
我知道我可以编写一个 python 脚本来轻松完成此操作,但想知道是否确实有一种方法可以结合 csvkit 的任何工具在 bash 脚本中执行此操作。我的假设是用来csvcut
从 csv 中提取数据行,但当然我仍然处于如何解析这些数据并将其输出为所需格式的同一块。
解决方案
通常,使用 bash、awk 和许多实用程序处理 TSV 文件与 CSV 文件相比要容易得多。它避免了引用的需要。csvformat 将处理conerion:
使用您当前的脚本:
csvformat -T projects.csv | while IFS=$'\t' read number year title website slug
do
if [ ! -d "$number-$slug" ]; then
mkdir ./$number-$slug
fi
echo -e "Year: $year\n----\nTitle: $title\n----\nWebsite: $website" > $number-$slug/project.txt
done
代码期望每条记录都有“slug”列,这不在示例输入中。我假设实际输入将在第 5 列
推荐阅读
- jenkins - 使用 SCM 中的声明性 Jenkins 管道 - Subversion - 如何获取 svn Url?
- node.js - 为什么 axios 尝试连接端口 80 而不是 8080?
- python - 当求解 13 方程线性方程需要太多时,是否意味着规范的一些问题?
- node.js - 使用两组不同的参数运行命令行
- excel - 是否可以在 Excel 中创建一个没有文本的下拉列表,只有颜色选项来填充单元格?
- c++ - 为其他人编译 OpenCV + Gstreamer
- junit - Junit测试后如何回滚Rabbit-mq消息?
- delphi - Delphi 5:将点击事件分配给 TImage 时出错
- c# - 如何将数据从一个视图显示到另一个 ASP.NET CORE 5.0 MVC
- laravel - laravel Eloquent 查询合集再次搜索