1. 程式人生 > 程式設計 >python實現檔案批量編碼轉換及注意事項

python實現檔案批量編碼轉換及注意事項

起因:大三做日本交換生期間在修一門C語言影象處理的程式設計課,在配套書籍的網站上下載了sample,但是由於我用的ubuntu18.04系統預設用utf-8編碼,而檔案原始碼是Shift_JIS編碼,因而文件註釋是亂碼。在不改變系統預設編碼的前提下,用python將'.c'和'.h'檔案的編碼轉換儲存新的資料夾,其餘檔案原封不動複製。

import os
abspath = "/home/fanghaoyu/桌面/libraries/" # 新資料夾的路徑
try:
  os.makedirs(abspath) # 建立新資料夾
except FileExistsError:
  pass
a = [] # 定義列表a,用來存放原檔案的路徑
b = [] # 定義列表b,用來存放新檔案的路徑
# 函式用來遞迴獲取檔案,更改編碼寫入到新資料夾中,如果不是.c和.h檔案則複製
def get_file_name(path1,path2):
  for i in os.listdir(path1):
    if os.path.isdir(os.path.join(path1,i)):
      try:
        os.makedirs(os.path.join(path2,i))
      except FileExistsError:
        pass
      get_file_name(os.path.join(path1,i),os.path.join(path2,i))
    else:
      a.append(os.path.join(path1,i))
      b.append(os.path.join(path2,i))
      if a[-1].endswith('.c') or a[-1].endswith('.h'):
        with open(a[-1],'r',encoding='Shift_JIS') as fp:
          s = fp.read()
          with open(b[-1],'w') as fp2:
            fp2.write(s)
            fp2.close()
      else:
        a[-1] = a[-1].replace(' ','\ ').replace('(','\(').replace(')','\)')
        b[-1] = b[-1].replace(' ','\)')
        os.system('cp {} {}'.format(a[-1].strip('\''),b[-1].strip('\'')))
  return 0
get_file_name("/home/fanghaoyu/桌面/prog978-4-7856-3179-6/",abspath)
print(a)
print(len(a))
print(b)
print(len(b))

執行結果如下:

/usr/bin/python3.6 /home/fanghaoyu/桌面/python/coding_change.py
['/home/fanghaoyu/桌面/prog978-4-7856-3179-6/chap06/vq.c','/home/fanghaoyu/桌面/prog978-4-7856-3179-6/chap06/vqcode.c',...]
1970
['/home/fanghaoyu/桌面/libraries/chap06/vq.c','/home/fanghaoyu/桌面/libraries/chap06/vqcode.c',...]
1970
Process finished with exit code 0

需要注意的幾點:

open開啟原檔案,開啟方式用'r',則需要設定編碼方式encoding='Shift_JIS'

python的os.system()命令中呼叫ubuntu的shell命令,當cp的檔名中含有' ','(',')'這三個時,需要在前面加上反斜槓'\',否則會報錯

總結

以上所述是小編給大家介紹的python實現檔案批量編碼轉換及注意事項,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們網站的支援!
如果你覺得本文對你有幫助,歡迎轉載,煩請註明出處,謝謝!