網路上的資料處理教學,範例檔案都很乾淨:UTF-8 編碼(現在最通用的那套中文對照表,各家軟體都認得)、逗號分隔、第一列是標題、每一欄型別一致。
我工作上遇到的檔案,常常不是那樣。
這一篇分兩半。前一半整理我實際踩過的六個坑——這些都是處理檔案、用程式讀檔時遇到的。後一半做了一件新的事:把同樣的問題檔案交給 Google 的 agy(Day 20 介紹過的 Antigravity CLI),看它會不會踩進同樣的坑。
老一點的公務檔案是 Big5 編碼(台灣早期電腦用的中文對照表,跟現在通用的 UTF-8 是兩套)。用現在的預設方式打開,會得到滿螢幕的亂碼。
解法是指定編碼。但真正的坑是你要先知道它是 Big5——而檔案本身不會告訴你。
進階版:Day 12 提過副檔名寫 .csv(本來應該用逗號隔開每一欄)卻用 Tab 鍵隔開的那種檔案。這裡要補的是它真正惡劣的地方——程式讀它不會報錯,只會安靜地把整列塞進第一欄。不報錯的錯誤最難發現。
這個坑我花過冤枉時間。
有一次我打開一份 PDF,內容全是亂碼。第一反應是「編碼有問題」,於是開始找轉檔工具、試各種編碼參數。
弄了半天才發現:檔案完全正常,是我的終端機顯示不出那些字。
換一個地方打開,一切正常。
教訓:看到亂碼,先確認是「資料壞了」還是「顯示不出來」。 這兩件事的解法完全相反,搞錯方向會花掉很多時間修一個沒壞的東西。
副檔名是 .doc 不是 .docx 的那種。
這不是「舊一點的格式」,是完全不同的檔案格式。我這次用的程式庫只支援 .docx,遇到 .doc 會直接失敗。
改副檔名沒有用——那只是改名字,內容還是舊格式。
實務上的解法是用 Word 本身把它轉成新格式,其他方法多少都會掉東西。
這個最陰險,因為它不會報錯,只會給你錯的答案。
公文往來常用 Word 的「追蹤修訂」功能——誰改了哪裡、加了什麼、刪了什麼,都記在檔案裡。
問題是:用我這次用的程式庫讀這種檔案,修訂中的文字讀不到。
結果是你的程式回報「這幾段是空的」,但實際打開檔案,那幾段明明有滿滿的內容——那些內容全都在修訂狀態裡。
如果你只看程式的輸出,會得到一個完全錯誤的結論。
我的處理方式:拿到公文往來的檔案,先確認有沒有追蹤修訂。有的話,先在 Word 裡「接受所有變更」另存一份,再拿去處理。
我最近才發現手邊有一組這樣的檔案:同一批資料,一份原始的,一份是 Excel 自動修復後另存的。
兩份的筆數不一樣。
我一度以為原始的是 404 筆、修復後的是 416 筆,差了 12 筆。
後來回頭查才發現那 12 筆根本不存在:416 是 Excel 記錄的「表格範圍」,不是資料筆數——那張工作表的範圍到第 417 列,實際有資料的只有 23 列。而且那個檔案裡有四個工作表,我只數了第一個。
這個坑的性質跟前面幾個一樣:它不會報錯。 程式老實回答了我問的問題,只是我問錯了問題。詳細的經過在 Day 8。
同一個資料夾裡還有一份 1.3 MB 的 .xlsx,程式讀不開,報錯說它不是有效的格式。
這份是全校的課程名單,同事依資安規定加了密碼才傳給我。
結果 AI 讀不開,給出的判斷是「大概壞了」,這篇的初稿也照著寫了。後來往檔案外殼看(經過在 Day 8),裡面是一個加密的容器,不是壞掉的試算表——它沒壞,密碼在做它該做的事。
錯誤訊息只說「格式不對」,不會告訴你「這是加密的」。同一句錯誤,可能是壞了,也可能是被保護著,而兩者的處理方式完全相反:壞了要找備份或重做;加密的檔案是完整的,該問的是「程式本來就該讀得到它嗎」。這份檔案依規定加了密,我就照規定不交給程式或 AI 處理——就算裡面的課名、授課老師多半本來就查得到(Day 27 談過公開資訊怎麼判斷),有規定的時候先照規定。這次的保護是有效的;出錯的是讀不開之後的那個猜測。

上面六個坑,都不是 agy 遇到的。所以我想知道:如果一開始就交給它,它分得出來嗎?
真實檔案不能拿來測——那份追蹤修訂的檔案是還沒定案的內部草案,課程名單依資安規定加了密碼,照規矩都不能交出去。所以我請幫我整理稿子的那個 AI(不是 agy)寫了一支小程式,用假資料做了四個「問題檔案」,內容全是編的,但毛病跟真的一樣:
.csv、其實用 Tab 隔開的檔案然後照平常交工作的方式交給 agy(版本 1.2.16),請它逐一讀、回報內容、指出有沒有異常。
第一次,它什麼都沒讀到。 它第一步想執行一個列出檔案的指令,被權限擋了下來,11 秒就結束了。這跟 Day 21 講過的是同一件事:預設權限下,要執行指令的動作會被擋,而且第一個被擋的動作就讓整個任務停下來。我在交代時加一句「只能用讀檔工具」,才跑得下去。
第二次它跑完了,報告看起來幾乎全對:這份是 Big5、這份有修訂、這份加了密碼。
仔細一看,它寫的是「從檔名推測可能是 Big5」「從檔名 locked 推測有加密」。我把檔案取名叫 big5.csv、locked.xlsx——答案寫在題目上了。
所以我把四個檔案改名成 A、B、C、D,內容不動,再測一次。這次的結果才算數:
| 檔案 | agy 的表現 |
|---|---|
| Tab 隔開的 csv | 認出來了:讀到內容,指出副檔名寫 .csv 但實際用 Tab 分隔 |
| Big5 的 csv | 讀不到,沒認出是 Big5,自己猜是其他原因 |
| 設了密碼的 Excel | 讀不到,判斷是「二進位檔」,沒認出是加密;但也沒說它壞了 |
| 追蹤修訂的 Word 檔 | 讀不到——它的讀檔工具回報「不支援這種壓縮格式」(.docx 本質上是一個壓縮檔) |
如果我沒注意到第二次的報告是從檔名猜的,這篇就會寫成「agy 四個坑全部認得出來」。測 AI 的時候,題目本身也要先過一遍:答案有沒有寫在題目上。
一、拿到檔案先看一眼基本資訊:有幾列、有哪些欄位、編碼是什麼。花三十秒,可以省掉後面很多困惑。
二、程式回報「空的」的時候,自己打開檔案確認一次。追蹤修訂那個坑就是這樣發現的。
三、同一批資料有兩個版本的時候,先搞清楚差在哪,再決定用哪個。不要兩個都用。
四、打不開的檔案,先查它是壞了還是被保護著。錯誤訊息不會替你分辨,而我第一次就猜錯了。(2026-10-11 更正:第一次猜「壞了」的是幫我讀檔的 AI,初稿照著寫了,見〈六〉。)
五、拿檔案測 AI 之前,先把檔名換成看不出答案的名字。不然你測到的是它會不會讀檔名。
幫得上的:處理編碼、猜分隔符號、整理多層表頭、批次轉檔。這些都是「有標準做法、結果可以驗證」的工作。
幫不上的,分兩種。
第一種是安靜讀錯:追蹤修訂那個坑就是典型,程式讀了、回報「這幾段是空的」。它沒有說謊,它看到的就是空的,但答案是錯的。
第二種是讀不到:這次 agy 遇到 Big5、加密檔、Word 檔都是這樣。它有說讀不到;原因有的講得出來(Word 檔),有的講不準——Big5 它猜成別的原因,加密檔只判成「二進位檔」。
兩種都沒辦法靠追問它來解決,只能靠你自己打開檔案看一眼——至少,第二種它會先告訴你該去看了。
Day 29:什麼該交給 AI,什麼絕對不該——三十天下來的總結。