2014年3月23日 星期日

批次轉換檔案的格式

手邊有文字檔遇到這個問題,
有些檔案是ANSI編碼,有些檔案是Unicode編碼,

因為這些檔案都分散在不同的目錄下
我又想要把這些檔案轉換後儲存在原來的目錄原來的檔名
上網找了很多程式,限制都很多
無法同時達到
1. 在不同的目錄下轉換檔案
2. 就算1. 可以也不能存回原來自己的位置
找著找著找到個東西叫 Notepad++ Python Script


Notepad++ 我有在用,Python 我也有在用
這東西該不會很方便的批次轉換檔案格式吧

用 Eclipse 寫了一段程式執行後跑出 notepad 未定義,
查了一下才知道原來 code 是要在 Notepad++ 裡面寫,
把 Notepad++ Python Script 解壓縮到 Notepad++ 安裝目錄下的 Plugin 後
開啟 Notepad++ 就可以看到外掛模組多了個 Python Script
根據這裡提供的範例寫了段 code
import os;
import sys;
filePathSrc="C:\\FilePath"
for root, dirs, files in os.walk(filePathSrc):
    for fn in files:
        if fn[-4:] == '.htm' or fn[-5:] == '.html':
            notepad.open(root + "\\" + fn)
            notepad.runMenuCommand("Encoding", "Convert to UTF-8")
            notepad.save()
            notepad.close()
一直跑出編碼的錯誤
因為我的路徑有日文,所以需要編碼轉換
notepad.open(root.encode('utf-8') + "\\" + fn.encode('utf-8'))
之後測試不會有錯誤,但是檔案還是沒有被轉換,
試了好久才在想不會吧,我的 Notepad++ 是用中文的,
索性把code改成
notepad.runMenuCommand("編碼", "轉換至 ANSI 碼格式")
可以了,一跑下去就等著收割了,簡直就是神兵力器
最後的 code 是這樣
# -*- coding: utf-8 -*-
'''
Created on 2014/3/23

@author: LearnRPG
'''
import os;
import sys;
filePathSrc = u"C:\\FilePath"
for root, dirs, files in os.walk(filePathSrc):
    for fn in files:
        if fn == 'test.txt':
            console.write(root.encode('utf-8') + "\\" + fn.encode('utf-8') + " coverting...\n")
            notepad.open(root.encode('utf-8') + "\\" + fn.encode('utf-8'))
            notepad.runMenuCommand("編碼", "轉換至 ANSI 碼格式")
            notepad.save()
            notepad.close()
console.write("\n")

2 則留言:

  1. 請問用最後code在中文下還是不會進行轉換
    是否notepad++的設定也要改才能在中文下進行轉換?

    回覆刪除
    回覆
    1. 應該說因為我的notepad++是裝中文版
      所以你對應的command要跟你安裝的notepad++選單(Menu)的描述一樣

      刪除

開放匿名留言 請大家注意網路禮儀