python實(shí)現(xiàn)文件批量編碼轉(zhuǎn)換及注意事項(xiàng)
起因:大三做日本交換生期間在修一門C語言圖像處理的編程課,在配套書籍的網(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,用來存放原文件的路徑
b = [] # 定義列表b,用來存放新文件的路徑
# 函數(shù)用來遞歸獲取文件,更改編碼寫入到新文件夾中,如果不是.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打開原文件,打開方式用'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ì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(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自然語言編碼轉(zhuǎn)換模塊codecs介紹
- python輕松實(shí)現(xiàn)代碼編碼格式轉(zhuǎn)換
- python將圖片文件轉(zhuǎn)換成base64編碼的方法
- python實(shí)現(xiàn)批量轉(zhuǎn)換文件編碼(批轉(zhuǎn)換編碼示例)
相關(guān)文章
Django通過dwebsocket實(shí)現(xiàn)websocket的例子
今天小編就為大家分享一篇Django通過dwebsocket實(shí)現(xiàn)websocket的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11
在Pytorch中計(jì)算卷積方法的區(qū)別詳解(conv2d的區(qū)別)
今天小編就為大家分享一篇在Pytorch中計(jì)算卷積方法的區(qū)別詳解(conv2d的區(qū)別),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01
python pandas模塊基礎(chǔ)學(xué)習(xí)詳解
這篇文章主要介紹了python pandas模塊基礎(chǔ)學(xué)習(xí)詳解的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Python&Matlab實(shí)現(xiàn)灰狼優(yōu)化算法的示例代碼
灰狼優(yōu)化算法是一種群智能優(yōu)化算法,它的獨(dú)特之處在于一小部分擁有絕對(duì)話語權(quán)的灰狼帶領(lǐng)一群灰狼向獵物前進(jìn)。本文具體介紹了灰狼優(yōu)化算法的兩種實(shí)現(xiàn)示例代碼,需要的可以參考一下2022-03-03
教你用一行Python代碼實(shí)現(xiàn)并行任務(wù)(附代碼)
這篇文章主要介紹了教你用一行Python代碼實(shí)現(xiàn)并行任務(wù)(附代碼),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-02-02
pandas apply使用多列計(jì)算生成新的列實(shí)現(xiàn)示例
這篇文章主要介紹了pandas apply使用多列計(jì)算生成新的列實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02

