iT邦幫忙

1

自己嘗試壓縮文檔,到底有多少效果?——(2.)自定義格式

  • 分享至 

  • xImage
  •  

這個時候我突然想說,不然自己來設計格式吧,感覺會很有趣。其實我的想法也沒很困難,只要是和上面格子內容相同,我們就用’=’來替代。
當然,為了增加更多的’=’,我們先排序吧!順序為縣市名稱→鄉鎮市區→原始路名→郵遞區號→投遞範圍

with open('台灣郵遞區號.csv', newline='', encoding = "UTF-8", errors='ignore') as csvfile:
    lst = [i for i in csv.reader(csvfile)]

# 按照 縣市名稱→鄉鎮市區→原始路名→郵遞區號→投遞範圍 順序調整(除非真的要自己試,不然這段不重要)
for i in range(1,len(lst)):
    lst[i] = lst[i][1:4] + [lst[i][0]] + [lst[i][4]]
lst = sorted(lst)

接下來修改

for i in range(len(lst)-1,0,-1): # 由後往前改,才不會被改動影響
    for j in range(5):
        if lst[i][j] == lst[i-1][j]:
            lst[i][j] = '='

with open('台灣郵遞區號.csv', 'w', newline='', encoding = "UTF-8") as csvfile:
    csv.writer(csvfile).writerows(lst)

檔案瞬間小很多,檔案大小為:1,593,048 byte
檔案部分顯示

南投縣,中寮鄉,中集路,54155,全
=,=,仙峰巷,54154,=
=,=,仙洞巷,54155,=
=,=,仙鹿巷,=,=
=,=,內城巷,54154,=
=,=,初中巷,=,=
=,=,大湳巷,54155,=
=,=,復興巷,54154,=
=,=,愛鄉巷,=,=
=,=,新城巷,=,連5號至35號
=,=,=,54155,連3號以下

由於整份檔案都是五行一列,所以把所有的內容先扁平為一列,之後再恢復也不會失真

with open('台灣郵遞區號.csv', newline='', encoding = "UTF-8", errors='ignore') as csvfile:
    lst = [i for i in csv.reader(csvfile)]
lst2 = []
for i in lst:
    lst2 += i
with open('台灣郵遞區號.csv', 'w', newline='', encoding = "UTF-8") as csvfile:
    csv.writer(csvfile).writerows([lst2])

檔案大小為:1,531,514 byte

到這裡,如果想要更進一步壓縮,只能想其他的辦法了。於是我決定使用字典的方式來繼續壓縮檔案。

自己嘗試壓縮文檔,到底有多少效果?——(3.)創建字典壓縮文檔


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言