python創建文件并指定編碼?大家好,我是JieJie編程路上一個人可能走的更快,但一群人才能走得更遠,關注JieJie一起學習不迷路今天分享的是 python中與文件、目錄有關的操作, 以及編碼格式相關的知識 ,話不多說,秃頭走起,下面我們就來聊聊關于python創建文件并指定編碼?接下來我們就一起去了解一下吧!
一、文件及目錄操作大家好,我是JieJie!編程路上一個人可能走的更快,但一群人才能走得更遠,關注JieJie一起學習不迷路!今天分享的是 python中與文件、目錄有關的操作, 以及編碼格式相關的知識 ,話不多說,秃頭走起
1.編碼格式介紹
大部分情況下我們學習編碼格式都是為了解決中文亂碼的問題。
常見的字符編碼格式:
Python的解釋器使用的是Unicode(内存)
.py文件在磁盤上默認使用UTF-8存儲(外存),可通過記事本打開文件,然後另存為就能看到了
在程序前加**#encoding=gbk**,我們就能更改編碼為ANSI,不同的編碼格式文件的大小是不一樣的。
2.文件的讀寫原理
文件的讀寫俗稱"IO操作"(input/output);IO的原理為隊列,先進先出,先讀入的數據流先寫出。
從外到内存為讀,從内存到外為寫。
讀寫操作流程:
操作原理:
.py文件通過解釋器向操作系統發出申請,操作系統讀寫磁盤上的文件。
3.文件讀寫操作
通過IO流将磁盤文件中的内容與程序中的對象的内容進行同步。
使用内置函數open()創建文件對象語法:
這裡要注意.txt文件的編碼格式默認為gbk,.如果文本的編碼格式不是GBK應該改一下;
4.常用的文件打開模式
文件的類型
按照文件中數據的組織形式,文件分為:
文本文件:
存儲的是普通的字符文本,默認為unicode字符集,可以使用記事本打開;
二進制文件:
把數據内容用字節進行存儲,無法用記事本打開,必須使用專門的軟件,一般來說,音頻、圖片都是二進制文件。
打開模式
打開模式 |
說明 |
r |
以隻讀模式打開文件。文件的指針将放在文件的開頭 |
w |
以隻寫模式打開文件,如果文件不存在則創建,文件指針在文件開頭;如果文件存在,則覆蓋原有内容,文件指針在文件的開頭 |
a |
以追加模式打開,如果文件不存在則創建,文件指針在文件開頭;如果文件存在,則在文件末尾追加内容,文件指針在原文件末尾。 |
b |
以二進制方式打開,不能單獨使用,需要與其他模式一起使用,rb/wb |
以讀寫方式打開,不能單獨使用,需要與其他模式一起使用,如a |
file=open('a.txt','r') #打開文件,r為隻讀模式?
print(file.readlines()) #将文件中内容輸出在列表中
file.close() #關閉資源
file=open('a.txt','w')
file.write('永遠的神')
file.close()
file=open('a.txt','a')
file.write('永遠的神')
file.close()
file=open('a.txt','a')
file.write('永遠的神')
file.close()
我們用二進制的方式讀取一張照片并寫在另一個.png文件裡(即複制照片)
5.文件對象常用的方法
注意:文件中寫入數據的時候,python并不會立刻寫入,而是會寫到緩沖區,等待清空的時候寫入,用flush可以将緩存區内容寫入文件并清空緩存,從而達到不用close文件就能寫入文件。清空之後無論使用多少次write都會在文件末尾寫入而不是重新覆蓋。 close之後不能再寫内容,flush可以。
6.with語句(上下文管理器)(***)
with語句可以自動管理上下文資源,不論什麼原因跳出with塊,都能确保文件正确的關閉,以此來達到釋放資源的目的。
with open('a.txt','r') as file:
print(file.read())
這樣寫,我們就不用手動close文件了。下面來看看具體的語法:
什麼是上下文管理器?
一個類對象,如果實現了__enter__()和__exit__()方法,稱此類對象遵守上下文管理協議,而類對象的實例對象稱為上下文管理器。
這裡的open是一個類,那麼open括号裡的内容就是一個上下文管理器。
#with語句實現圖片的複制
with open ('photo.png','rb') as src_file:
with open ('copyphoto.png','wb') as target_file:
target_file.write(src_file.read())
7.目錄操作
os模塊是内置的與操作系統功能和文件系統相關的模塊,該模塊中的語句的執行結果通常與操作系統有關,在不同的操作系統上運行,得到的結果可能不同。
os模塊與os.path模塊用于對目錄或者文件進行操作
對操作系統功能進行操作:
import os
#os.system('notepad.exe') #打開記事本
#os.system('calc.exe') #打開計算器
#直接調用可執行文件
os.startfile('C:\\Program Files (x86)\\Tencent\\QQ\\Bin\\qq.exe') #打開QQ
對文件目錄進行操作
os模塊的使用
import os
print(os.getcwd()) #輸出當前工作目錄
lst=os.listdir('demom.py') #(./文件名)表示回退兩個目錄
print(lst)
os.mkdir('newdir1') #創建目錄
os.makedirs('a/b/c') #創建多級目錄
os.rmdir('newdir1') #删除目錄
os.removedirs('a/b/c') #删除多級目錄
os.chdir('C:\\Users\\27101\\Desktop\\demom.py') #将目錄設置為當前工作目錄
print(os.getcwd())
os.path模塊的使用
import os.path
print(os.path.abspath('demo2.py')) #顯示文件的絕對路徑
print(os.path.exists('demo2.py'),os.path.exists('demo22222.py')) #文件是否存在
print(os.path.join('D:\\cs','demo2.py')) #拼接路徑
print(os.path.split('C:\\Users\\27101\\Desktop\\demom.py')) #将路徑與文件名分開
print(os.path.splitext('demo2.py')) #将文件名與擴展名分開
print(os.path.basename('C:\\Users\\27101\\Desktop\\demom.py')) #提取文件名
print(os.path.dirname('C:\\Users\\27101\\Desktop\\demom.py')) #提取路徑
print(os.path.isdir('C:\\Users\\27101\\Desktop\\demom.py\\demo2.py')) #結果是否為目錄,demo2為一個文件
結果如下:
最後以兩個例子結尾:①輸出指定目錄下的所有.py文件
#輸出指定目錄下的所有.py文件
import os
path=os.getcwd()
lst=os.listdir(path)
for filename in lst:
if filename.endswith('.py'): #以.py結尾的
print(filename)
通常在辦公自動化等的時候需要對excel等文件進行批量處理時會用到這種目錄操作。
②遞歸遍曆一個文件夾中所有的目錄
#遍曆一個文件夾下所有的文件及目錄
import os
path=os.getcwd()
lst_file=os.walk(path) #walk()方法獲得目錄下所有文件,返回元組
for dirpath,dirname,filename in lst_file:
print(dirpath)
print(dirname)
print(filename)
print('________________________')
for dir in dirname:
print(os.path.join(dirpath,dir)) #将路徑與目錄連接
print('----------------------------------------------')
for file in filename:
print(os.path.join(dirpath,file)) #将路徑與文件名連接
今日分享到此結束,由于筆者還在求學之路上輾轉徘徊,水平有限,文章中可能有不對之處,還請各位大佬指正,祝願每一個熱愛編程的人都能實現追求,考研上岸進大廠,熬夜秃頭卷中王。
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!