【发布时间】:2013-07-10 03:02:42
【问题描述】:
我正在尝试将包含 3 列 (ATTRIBUTE_NAME,ATTRIBUTE_VALUE,ID) 的 csv 文件转换为每行为 (ID,Attribute1,Attribute2,Attribute3,....) 的平面表。最后提供了此类表格的示例。
Python、Perl 或 SQL 都可以。非常感谢您,我非常感谢您的时间和努力!
事实上,我的问题与post 非常相似,除了在我的情况下,属性的数量非常大(~300)并且每个 ID 之间并不一致,因此对每个属性进行硬编码可能不切实际解决方案。
对我来说,具有挑战性/困难的部分是:
- 大约有 2.7 亿行输入,输入表的总大小约为 60 GB。
- 一些单个值(字符串)中包含逗号(
,),整个字符串将用双引号(")括起来,以使读者意识到这一点。例如 ID=53 中的"JPMORGAN CHASE BANK, NA, TX"。 - ID 的属性集不同。比如整体属性个数是8,但是ID=53、17、23分别只有7、6、5个。 ID=17没有
string_country和string_address属性,所以在逗号后面输出blank/nothing。
输入属性值表如下所示。在这个示例输入和输出中,我们有 3 个 ID,其属性数量可以不同,具体取决于我们是否可以从服务器获取这些属性。
ATTRIBUTE_NAME,ATTRIBUTE_VALUE,ID
num_integer,100,53
string_country,US (United States),53
string_address,FORT WORTH,53
num_double2,546.0,53
string_acc,My BankAcc,53
string_award,SILVER,53
string_bankname,"JPMORGAN CHASE BANK, NA, TX",53
num_integer,61,17
num_double,34.32,17
num_double2,200.541,17
string_acc,Your BankAcc,17
string_award,GOLD,17
string_bankname,CHASE BANK,17
num_integer,36,23
num_double,78.0,23
string_country,CA (Canada),23
string_address,VAN COUVER,23
string_acc,Her BankAcc,23
输出表应如下所示。 (列中属性的顺序不固定,可以按字母顺序排序,也可以按出现顺序排序。)
ID,num_integer,num_double,string_country,string_address,num_double2,string_acc,string_award,string_bankname
53,100,,US (United States),FORT WORTH,546.0,My BankAcc,SILVER,"JPMORGAN CHASE BANK, NA, TX"
17,61,34.32,,,200.541,Your BankAcc,GOLD,CHASE BANK
23,36,78.0,CA (Canada),VAN COUVER,,Her BankAcc,,
【问题讨论】:
-
您似乎正在将一个 CSV 文件转换为另一个 CSV。 SQL 在哪里考虑到这一点?
-
嗨 @runrig 我对 Python 和 R 没问题,但可以理解一点 Perl。我现在正在尝试 Python。
-
嗨,shawnhcorey,是的,你是对的。这实际上是关于将 csv 文件转换为另一个 csv 文件。我提到 SQL 是因为我只是认为 SQL 可能会提供一些自动执行此操作的函数,但我找不到。
标签: sql database perl csv python-3.x