python實(shí)現(xiàn)文件批量編碼轉(zhuǎn)換及注意事項(xiàng)
起因:大三做日本交換生期間在修一門C語(yǔ)言圖像處理的編程課,在配套書(shū)籍的網(wǎng)站上下載了sample,但是由于我用的ubuntu18.04系統(tǒng)默認(rèn)用utf-8編碼,而文件源碼是Shift_JIS編碼,因而文檔注釋是亂碼。在不改變系統(tǒng)默認(rèn)編碼的前提下,用python將'.c'和'.h'文件的編碼轉(zhuǎn)換保存新的文件夾,其余文件原封不動(dòng)復(fù)制。
import os abspath = "/home/fanghaoyu/桌面/libraries/" # 新文件夾的路徑 try: os.makedirs(abspath) # 創(chuàng)建新文件夾 except FileExistsError: pass a = [] # 定義列表a,用來(lái)存放原文件的路徑 b = [] # 定義列表b,用來(lái)存放新文件的路徑 # 函數(shù)用來(lái)遞歸獲取文件,更改編碼寫入到新文件夾中,如果不是.c和.h文件則復(fù)制 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(' ', '\ ').replace('(', '\(').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))
運(yùn)行結(jié)果如下:
/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
需要注意的幾點(diǎn):
open打開(kāi)原文件,打開(kāi)方式用'r',則需要設(shè)置編碼方式encoding='Shift_JIS'
python的os.system()命令中調(diào)用ubuntu的shell命令,當(dāng)cp的文件名中含有' ', '(', ')'這三個(gè)時(shí),需要在前面加上反斜杠'\',否則會(huì)報(bào)錯(cuò)
總結(jié)
以上所述是小編給大家介紹的python實(shí)現(xiàn)文件批量編碼轉(zhuǎn)換及注意事項(xiàng),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
- python字符串與url編碼的轉(zhuǎn)換實(shí)例
- python實(shí)現(xiàn)unicode轉(zhuǎn)中文及轉(zhuǎn)換默認(rèn)編碼的方法
- Python編碼類型轉(zhuǎn)換方法詳解
- python實(shí)現(xiàn)中文轉(zhuǎn)換url編碼的方法
- Python批量轉(zhuǎn)換文件編碼格式
- python自然語(yǔ)言編碼轉(zhuǎn)換模塊codecs介紹
- python輕松實(shí)現(xiàn)代碼編碼格式轉(zhuǎn)換
- python將圖片文件轉(zhuǎn)換成base64編碼的方法
- python實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼(批轉(zhuǎn)換編碼示例)
相關(guān)文章
Python中的文件和目錄操作實(shí)現(xiàn)代碼
對(duì)于文件和目錄的處理,雖然可以通過(guò)操作系統(tǒng)命令來(lái)完成,但是Python語(yǔ)言為了便于開(kāi)發(fā)人員以編程的方式處理相關(guān)工作,提供了許多處理文件和目錄的內(nèi)置函數(shù)。重要的是,這些函數(shù)無(wú)論是在Unix、Windows還是Macintosh平臺(tái)上,它們的使用方式是完全一致的。2011-03-03Python?plt.title()函數(shù)實(shí)例詳解
plt.title() 是 matplotlib 庫(kù)中用于設(shè)置圖形標(biāo)題的函數(shù),這篇文章主要介紹了Python?plt.title()函數(shù),需要的朋友可以參考下2023-03-03Python使用pip安裝報(bào)錯(cuò):is not a supported wheel on this platform的解決
這篇文章主要介紹了Python使用pip安裝報(bào)錯(cuò):is not a supported wheel on this platform的解決方法,結(jié)合實(shí)例形式分析了在安裝版本正確的情況下pip安裝報(bào)錯(cuò)的原因與相應(yīng)的解決方法,需要的朋友可以參考下2018-01-01解決Pandas to_json()中文亂碼,轉(zhuǎn)化為json數(shù)組的問(wèn)題
今天小編就為大家分享一篇解決Pandas to_json() 中文亂碼,轉(zhuǎn)化為json數(shù)組的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05OpenCV每日函數(shù)之BarcodeDetector類條碼檢測(cè)器
OpenCV在V4.5.3版本的contrib包中提供了一個(gè)barcode::BarcodeDetector類,用于條形碼的識(shí)別,這篇文章主要介紹了OpenCV每日函數(shù)?BarcodeDetector條碼檢測(cè)器,需要的朋友可以參考下2022-06-06Python實(shí)現(xiàn)的尋找前5個(gè)默尼森數(shù)算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的尋找前5個(gè)默尼森數(shù)算法,簡(jiǎn)單講述了默尼森數(shù)的概念,并結(jié)合實(shí)例形式分析了Python求解默尼森數(shù)算法的相關(guān)操作技巧,需要的朋友可以參考下2018-03-03python圖像處理模塊Pillow的學(xué)習(xí)詳解
這篇文章主要介紹了python圖像處理模塊Pillow的學(xué)習(xí)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10