Csv

使用多行單元格拆分 CSV

  • February 12, 2020

我正在處理一些由 YouTube 生成的 CSV 文件(因此我無法更改源結構)。在 CSV 文件中,一些記錄跨越多行。為簡潔起見省略了許多其他列的假設範例如下:

video_id, upload_time, title, policy
oHg5SJYRHA0, 2007/05/15, "RickRoll'D", "Monetize in all countries except: CU, IR, KP, SD, SY
Track in countries: CU, IR, KP
Block in countries: SD, SY"
dQw4w9WgXcQ, 2009/10/24, "Rick Astley - Never Gonna Give You Up", "Monetize in all countries except: CU, IR, KP, SD, SY
Track in countries: CU, IR, KP, SD, SY"

一個典型的文件包含數十萬條記錄,如果不是數百萬條記錄(一個文件大小為 29.57GB),這太大而無法一次性處理,所以我想將它們分成更小的塊以便在不同的機器上處理. 我以前在其他報告文件上使用過splitwith -l,當單元格中沒有換行符時效果很好。在這種情況下,如果拆分發生在錯誤的行上(例如:範例的第 4 行),那麼我已經破壞了兩個文件中的記錄。缺少解析 CSV 文件然後將其重建為多個文件,有沒有一種有效的方法來拆分 CSV 像這樣?

您將需要解析 CSV 文件以按照您想要的方式以較小的塊重新發送它。在這個操作過程中,也許你甚至想以不同的、更嚴格、定義明確的格式重新發出它(比如,哦,我不知道,json)。

您的輸入文件的格式非常不尋常。Python 的 csv 模組無法解析它,因為它有一個多字元分隔符:(,逗號空格)而不是更常見的,. 否則,您將能夠使用 5 行 Python 輕鬆解析並重新發出文件。

您必須找到另一個有效的解析器,或者編寫一個小的解析器。首先,試著找出你手頭的格式的細節是什麼,比如引用規則是什麼(例如,當用"contains引用的欄位時會發生什麼"。)

引用自:https://unix.stackexchange.com/questions/349176