關於檔案格式識別轉換

2021-10-04 17:29:24 字數 3431 閱讀 7072

學校上機實驗的一道作業題(可能是我太菜完全不會寫,寫出來整理一下,內容僅為個人理解)

作業內容:編寫程式,使用者在命令提示行輸入檔名和該檔案的編碼格式,讀入檔案,將其轉存成utf-8格式。如果使用者沒有指定輸入檔案的編碼格式,則使用chardet模組「猜」出其編碼格式,用於解碼。使用argparse模組解析使用者命令提示行輸入。

檔案是資料儲存的一直形式,它有兩種展現形態,一種是二進位制形態一種是文字形態。這兩種本質上都是二進位制形態。

而文字檔案就是利用某種單一編碼組成的檔案,也可以理解成儲存著的字串。其中這個單一編碼就是編碼格式,例如utf-8格式,ascii等等

使用chardet模組檢測編碼格式很簡單,使用chardet. detect()方法就可以得到,例如:

>>

>chardet.detect(b'hellow world'

)>>

> data =

'我愛祖國'

.encode(

'utf-8'

)>>

> chardet.detect(data)

encoding代表編碼格式,confidenc代表檢測的概率,language不解釋

argparse 是python自帶的命令列引數解析包,可以用來方便地讀取命令列引數,當需要頻繁地修改引數的時候,使用這個工具可以將引數和**分離開來,讓你的**更簡潔,適用範圍更廣。

主要有以下三個方法:

argumentparser()生成乙個argparse物件

argumentparser().add_argument( ) 增加引數

argumentparser().parse_args( ) 顯示引數

import argparse

defmain()

: parser = argparse.argumentparser(description=

'change the encoding'

)#description是argparse物件的描述

parser.add_argument(

'--name'

,default=

'link'

,help

='name'

) parser.add_argument(

'--old'

,default=

'14'

,help

='year'

)#default為引數預設值 --name為引數名 help為引數的說明

args=parser.parse_args(

)#這一步是所有獲取的引數

print

(args)

print

('hello {}'

.format

(args.name)

)if __name__ ==

'__main__'

: main(

)

不輸入引數直接使用『python 檔名』結果如下:首先是檔案的各種開啟方式:f=open(「t.txt」) 文字形式,唯讀,

f=open(「t.txt」,「rt」) 文字形式,唯讀

f=open(「t.txt」,「w」) 文字形式,覆蓋寫模式

f=open(「t.txt」,「a+」) 文字形式,追加寫模式+讀

f=open(「t.txt」,「x」) 文字形式,建立寫模式

f=open(「t.txt」,「b」) 二進位制形式,唯讀

f=open(「t.txt」,「wb」) 二進位制形式,覆蓋寫模式

編碼格式的轉換方法為:

以原編碼形式開啟檔案,讀取內容

以目標**形式開啟檔案,寫入之前讀取的內容

(本菜雞暫時能想到的方法)

import chardet

import argparse

defmain()

: parse = argparse.argumentparser(description=

'change the encoding'

) parse.add_argument(

'--file_name'

, default=r'c:\users\16934\desktop\測試.txt'

,help

='file name'

) parse.add_argument(

'--encode'

,help

='file encode'

) args = parse.parse_args(

)#如果原編碼型別沒有給出則判斷編碼型別

with

open

(args.file_name,

'rb'

)as f:

#只有以二進位制形式開啟,才能使用chardet

ifnot args.encode:

args.encode = chardet.detect(f.read())

['encoding'

]print

(args.encode)

#這裡的為上面改變格式方法的**

with

open

(args.file_name,

'r',encoding=args.encode)

as f:

content=f.read(

) f=

open

(args.file_name,

'w',encoding=

'utf-8'

) f.write(content)

f.close(

)with

open

(args.file_name,

'rb'

)as f:

print

(chardet.detect(f.read())

['encoding'])

if __name__ ==

'__main__'

: main(

)

原檔案為數字的執行結果:

因為提前設定了檔名 所以不需要任何輸入。這裡結果仍然為ascii推測原因為detect檢測問題。

原檔案為漢子的執行結果

此時結果正常

(我吐了,第一篇部落格寫了這麼久)

DOS檔案格式 與 UNIX檔案格式 轉換

這裡闡述兩種方法 1.使用vim的方法 在vim下 使用如下命令 set fileformat unix 就可轉換成 unix 檔案格式,也可使用其縮寫形式命令 set ff unix 直接輸入命令 set fileformat 或 set ff 還可查詢當前的命令格式。2.使用linux命令工具 ...

Python檔案格式轉換

將帶有點座標的 csv 轉 geojson,不帶其他屬性 import csv csv file open e test.csv encoding gbk csv reader csv.reader csv file geojson properties type feature float row...

stardict字典檔案格式識別類

using system using system.collections.generic using system.io using system.linq using system.text namespace cn.laiyunqing public list string words str...