【发布时间】:2021-06-15 00:34:51
【问题描述】:
您好,我正在寻找一种最快的解决方案来处理大量 csv 文件。
情况: 我在一个文件夹中有多个带有不同标题的 csv 文件
我已经对它们进行了预处理以删除顶部的垃圾行,所以它们都有一个标准标题。
我想将一组 CSV 文件与完全相同的听众合并到一个新文件夹
Single Folder:
Tree
├── 161598827330618_data_aa.csv
├── ..............
├── ...............
├── ................
├── 161598852706227_data_bh.csv
Note: Filenames are Random with no pattern*
示例文件-1.csv
School Name,Project Description,Construction Award,Project type,Building ID,Building Address,City,Postcode
George HS - QUEENS,New,76850000,CAP,Q298,50-51 98TH STREET,Queens,11368
MARBLE HILL INTERNATIONAL HS -,EXT MASONRY/FLOOD/PARAPETS/ROOFS,10490000,CIP,X475,99 TERRACE VIEW AVENUE,Bronx,10463
NEW DORP HS - STATEN ISLAND,PARTIAL ACCESSIBILITY,488000,CIP,R435,465 NEW DORP LANE,Staten Island,10306
示例文件 2.csv
School Name,Project Description,Construction Award,Project type,Building ID,Building Address,City,Postcode
EAST SIDE COMMUNITY SCHOOL,FIFTH FLOOR CEILING REPLACEMENT,150000,CIP,M060,420 EAST 12 STREET,Manhattan,10009
RICHMOND HILL HS - QUEENS,STEEL DETERIORATED COLUMS & COLUMN,1064400,CIP,Q475,89-30 114 STREET,Queens,11418
SUCCESS ACADEMY CHARTER SCHOOL,INTERIOR STAIRS,2045000,CIP,M099,410 EAST 100 STREET,Manhattan,10029
示例文件-3.csv
Reporting Period,Project Number,City,County,Zip Code,Sector,Solicitation,Electric Utility
02/28/2021,2453,Youngstown,,14174,Non-Residential,ARRA Projects,National Grid
02/28/2021,218852,Queens,Queens,11356,Residential,PON 2112,Consolidated Edison
02/28/2021,220037,Warwick,Orange,10990,Residential,PON 2112,Orange and Rockland Utilities
02/28/2021,2011-230103-SLPR,Center Moriches,Suffolk,11934,Residential,Solar ARRA Funding,Long Island Power Authority
示例文件 4.csv
Reporting Period,Project Number,City,County,Zip Code,Sector,Solicitation,Electric Utility
02/28/2021,2453,Youngstown,,14174,Non-Residential,ARRA Projects,National Grid
02/28/2021,218852,Queens,Queens,11356,Residential,PON 2112,Consolidated Edison
02/28/2021,220037,Warwick,Orange,10990,Residential,PON 2112,Orange and Rockland Utilities
02/28/2021,2011-230103-SLPR,Center Moriches,Suffolk,11934,Residential,Solar ARRA Funding,Long Island Power Authority
示例文件 5.csv
OBJECTID,Borough,PSSite,ParkName,ParkZone,PSStatus,GlobalID,CreatedDate,UpdatedDate
283721,Brooklyn,Street,,,Populated,C90AAD08-D99E-4759-A64C-219D6143BFB3,07-08-15 13:10,12/20/2019 04:34:58 PM
7669836,Queens,Park,Astoria Park,Q004-ZN02,Empty,AB55A658-8276-4734-A698-5FFCAE96578E,08/13/2020 01:18:00 PM,08/20/2020 06:15:32 PM
7123408,Brooklyn,Park,Asser Levy Park,,Populated,B32D93C9-5958-4129-A87A-FA7C9A5A4E87,01-09-20 13:15,01-09-20 13:17
示例文件-6.csv
OBJECTID,Borough,PSSite,ParkName,ParkZone,PSStatus,GlobalID,CreatedDate,UpdatedDate
6036681,Manhattan,Park,Riverside Park,,Populated,6A3E747D-CD5E-43EB-9789-67DB2064E878,04-11-18 11:11,08-06-20 21:21
7170578,Bronx,Park,Garden Of Eden,,Populated,B1E8B660-4B65-437F-B61F-06B1B71A4E1C,01/28/2020 03:18:00 PM,01/28/2020 03:19:26 PM
740416,Bronx,Park,Mullaly Park,X034-ZN02,Populated,E8F51E3B-CC6F-46A3-AF17-02B6BE8DCC57,08/26/2015 04:34:00 PM,01/30/2020 04:10:41 PM
5004669,Queens,Street,,,Populated,20157769-88EC-4867-9F50-852EF4814BF0,11-02-16 16:56,08-03-20 13:12:00 AM
示例文件-7.csv
Indicator,Group,State,Subgroup,Phase,Time Period,Time Period Label,Value,Low CI,High CI,Confidence Interval
Private Health Insurance Coverage,National Estimate,United States,United States,1,1,Apr 23 - May 5,75.4,74.7,76.2,74.7 - 76.2
Public Health Insurance Coverage,By Age,United States,18 - 24 years,1,1,Apr 23 - May 5,19.5,15.4,24.3,15.4 - 24.3
Uninsured at the Time of Interview,By Gender,United States,Female,1,1,Apr 23 - May 5,11,10.3,11.7,10.3 - 11.7
示例文件-8.csv
Year, dtmSurveyDate, ColonyID, strAOUCode, Type, strPhotoInterpreters, strColonyName, strCounty, strState, strCountry
2014,03-Jun-14,219-001,COMU,Image Check - No Birds,Kirsten Bixler,"""Tillamook Head Rocks"" (Eastern Rocks)",Clatsop County,Oregon,United States
2014,03-Jun-14,219-002,COMU,Image Check - No Birds,Kirsten Bixler,"""Tillamook Head Rocks"" (Northern Rock)",Clatsop County,Oregon,United States
2014,03-Jun-14,219-003,COMU,Shapefile-RawCount,Kirsten Bixler,"""Tillamook Head Rocks"" (Southwestern Rocks)",Clatsop County,Oregon,United States
2014,03-Jun-14,219-005,COMU,Shapefile,Shawn W. Stephensen,Tillamook Rock,Clatsop County,Oregon,United States
期望的结果:
示例文件 1.csv }
Sample File-2.csv } 标头检查 > Same Header found> MERGE > GROUP-1.csv
示例文件 3.csv }
Sample File-4.csv } 标头检查 > Same Header found> MERGER > GROUP-2.csv
示例文件 5.csv }
Sample File-6.csv } 标头检查 > Same Header found > MERGER > GROUP-3.csv
Sample File-7.csv } 标题检查 > No Similar Headers > NOTHING> GROUP-5.csv
示例 File-8.csv } 标头检查 > No Similar Headers > NOTHING> GROUP-6.csv
首选解决方案:Bash 脚本和 Linux 命令 尝试过的解决方案:
#!/bin/bash
awk '
FNR==1{
if (!($0 in h)||file!=h[$0]){close(file)}
if (!($0 in h)){file=h[$0]=i++}
else{file=h[$0];next}
}
{print >> (file)}
' ./*.csv
https://unix.stackexchange.com/a/602291/459978
上述方法有效,但我不确定它是否可以处理 1000 多个文件进行处理和分类。 我需要在不同的文件夹中创建 Group*.csv 格式。
最短的完成时间很重要 https://stackoverflow.com/a/51921621/3088275
为 bash 脚本寻找带有 Awk 或 Sed 或 Linux 命令的操作码,以最快的速度实现所需的输出
【问题讨论】:
-
“我不确定它是否可以处理 1000 多个文件” ...您的测试表现如何?你遇到过内存不足的问题吗?过程是'slow'吗?如果是,你能详细说明'slow'是什么意思吗?
-
在您的'预处理'期间,您是否有机会将所有标题加上相关文件名收集到一个文件中(例如,
header_1:file1\nheader_1:file2\nheader-7:file3:...) ?如果是这样,您可以对所述文件进行排序(按标题),然后通过简单的bash\while循环(或awk,如果您愿意)处理来自所述文件的行,使用第二个字段(文件名)直接执行@987654346 @ -
@markp-fuso oops 编辑了 #7、#8 进入不同的组
Group-5.csv和Group-6.csv,因为 HEADER 与文件夹中的任何一个都不匹配 -
您的标签中有 python,如果您知道如何使用,请使用它。比您想出的任何脚本解决方案都要快。