[問題] 抓格式不整齊的csv

看板Python作者 (琳)時間7年前 (2018/03/29 16:00), 編輯推噓12(12028)
留言40則, 11人參與, 7年前最新討論串1/1
大家好, csv某欄的資料裡面包含逗號, 當用python抓的時候就會產生問題, 想請教有什麼方式可以抓某欄格式不整齊的csv資料。謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.139.157.17 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1522310427.A.F6E.html

03/29 16:12, 7年前 , 1F
你的 cvs 內容內,有逗點的資料有用雙引號包起來嗎?
03/29 16:12, 1F

03/29 16:28, 7年前 , 2F
沒有用雙引號包,資料來自老師,但筆數過多也無法人工加
03/29 16:28, 2F

03/29 16:28, 7年前 , 3F
雙引號
03/29 16:28, 3F

03/29 16:31, 7年前 , 4F
如果後欄是數字的話就還有機會,你可以在這一欄特別處理讀
03/29 16:31, 4F

03/29 16:31, 7年前 , 5F
到數字為止(前提是這欄裡面沒數字)
03/29 16:31, 5F

03/29 16:32, 7年前 , 6F
或者這一欄如果「一定有剛好一個逗號」的話,你可以當成兩
03/29 16:32, 6F

03/29 16:32, 7年前 , 7F
欄來讀,再合併並補上中間的逗號
03/29 16:32, 7F

03/29 16:33, 7年前 , 8F
若沒以上這些比較好處理的情況,要程式自動處理就不容易了
03/29 16:33, 8F

03/29 16:43, 7年前 , 9F
該欄像人的一般敘述,所以有多個逗號,部分可能也有數字,
03/29 16:43, 9F

03/29 16:43, 7年前 , 10F
此外下一欄還是文字
03/29 16:43, 10F

03/29 16:43, 7年前 , 11F
欄位內容有沒有什麼規則呢?
03/29 16:43, 11F

03/29 16:47, 7年前 , 12F
感覺沒有,屬於人的描述,有逗號、數字、文字
03/29 16:47, 12F

03/29 16:56, 7年前 , 13F
如果只有這一欄是這種情況 那你就把切開來會比正常多
03/29 16:56, 13F

03/29 16:57, 7年前 , 14F
幾欄的那些挑出來 特別處理以後再放回去
03/29 16:57, 14F

03/29 17:03, 7年前 , 15F
目前想到可以寫個file I/O的script 將逗點數量不正
03/29 17:03, 15F

03/29 17:03, 7年前 , 16F
確的lines濾出來另外處理
03/29 17:03, 16F

03/29 17:18, 7年前 , 17F
想問K大要怎麼切呢,要依據什麼切?
03/29 17:18, 17F

03/29 17:19, 7年前 , 18F
也想問J大要依據什麼過濾呢?
03/29 17:19, 18F

03/29 17:19, 7年前 , 19F
不考慮放個資料圖給大家看一下你的資料長什麼樣?
03/29 17:19, 19F

03/29 17:27, 7年前 , 20F
line by line讀取,count逗號數量,正確的話將該行
03/29 17:27, 20F

03/29 17:27, 7年前 , 21F
寫到file A,否則寫到file B
03/29 17:27, 21F

03/29 17:27, 7年前 , 22F

03/29 17:29, 7年前 , 23F
這是模擬資料,概念是地址這欄有很多逗號,導致格式不整
03/29 17:29, 23F

03/29 17:29, 7年前 , 24F
齊了,但真實資料中的下一欄是文字,非影像中的數字
03/29 17:29, 24F

03/29 17:30, 7年前 , 25F
用純文字方式開啟可能比較好讓大家觀察
03/29 17:30, 25F

03/29 17:36, 7年前 , 26F
你的逗號看來是全形,應該不影響啊.....
03/29 17:36, 26F

03/29 17:38, 7年前 , 27F

03/29 18:10, 7年前 , 28F
用regex找電話號碼的欄位,前面的都當成地址行不行
03/29 18:10, 28F

03/29 18:16, 7年前 , 29F
反過來抓,後面三個欄位保留,前面合併
03/29 18:16, 29F

03/29 18:32, 7年前 , 30F
假設你的資料都是高雄,line 為讀入的一行
03/29 18:32, 30F

03/29 18:32, 7年前 , 31F
a,b=line.split('07-')
03/29 18:32, 31F

03/29 18:33, 7年前 , 32F
a就是地址部分,b自行把'07-'補上,再做一次split
03/29 18:33, 32F

03/29 21:06, 7年前 , 33F
如果資料是你貼的這樣,從後面切回來就好啦,rsplit(‘
03/29 21:06, 33F

03/29 21:06, 7年前 , 34F
,’,5)
03/29 21:06, 34F

03/29 23:19, 7年前 , 35F
感謝各位前輩的慷慨幫助,等我拿到真實資料就來試試,再
03/29 23:19, 35F

03/29 23:19, 7年前 , 36F
次感謝
03/29 23:19, 36F

03/30 10:12, 7年前 , 37F
這圖裏面是不是有個資?要注意喔,會被告的
03/30 10:12, 37F

03/30 11:08, 7年前 , 38F
03/30 11:08, 38F

03/30 11:32, 7年前 , 39F
謝謝J大提醒,這是開放式資料下載來的
03/30 11:32, 39F

03/30 11:32, 7年前 , 40F
也謝謝N大我來研究看看
03/30 11:32, 40F
文章代碼(AID): #1Ql9qRzk (Python)
文章代碼(AID): #1Ql9qRzk (Python)