成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入Python中的文件操作

開發 后端
任何語言都離不開對文件的操作,那么Python語言是如何來操作和管理文件的。

[[350542]]

 任何語言都離不開對文件的操作,那么Python語言是如何來操作和管理文件的。

編碼方式

編碼方式的歷史大致為ASCII ->gb2312->unicode->utf-8,期間具體詳細信息可以百度

來個編碼解碼的小例子先,記住中文可以進行GBK和utf-8編碼,在GBk一個中文字符對應兩個字節,在utf-8一個中文字符對應三個字節,中文不能進行ASCII編碼。

  1. >>> '劉潤森'.encode('GBK'
  2. b'\xc1\xf5\xc8\xf3\xc9\xad' 
  3. >>> '劉潤森'.encode('ascii'
  4. Traceback (most recent call last): 
  5.   File "<stdin>", line 1, in <module> 
  6. UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128) 
  7. >>> 'Runsen'.encode('ascii'
  8. b'Runsen' 
  9. >>> "劉潤森".encode('utf-8'
  10. b'\xe5\x88\x98\xe6\xb6\xa6\xe6\xa3\xae' 
  11. >>> '劉潤森'.encode('GBK').decode('GBK'
  12. '劉潤森' 
  13. >>> '劉潤森'.encode('GBK').decode('utf-8'
  14. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc1 in position 0: invalid start byte 

如果編碼解碼格式不一致可能會出現亂碼,encode表示編碼,decode表示解碼。

 

文件操作的API

下面是Python文件操作的具體的API。

打開文件

Python的open()函數打開一個文件時,有若干個參數可用。然而,最常用的參數只有前兩個。

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)注意,第一個是強制性的,其余的是可選的。如果不添加mode參數,文件將在Python中以只讀模式打開。

 

encoding:可以不寫。不寫參數,默認的編碼本是操作系統默認的編碼本。windows默認gbk,linux默認utf-8,mac默認utf-8。

  1. f=open('test.txt',encoding='utf-8')   #打開文件 
  2. data=f.read()  #讀取文件 
  3. print(data) 
  4. f.close() #關閉文件       

mode

讀取文件

代碼中用到的文件文件操作的1.txt 文件內容如下:

  1. 關注《Python之王》公眾號 
  2. 作者:Runsen 

readline(),使用該方法時,需要指定打開文件的模式為r或者r+;

 

readlines(),讀取全部行.返回一個列表,列表中的每個元素是原文件的每一行。如果文件很大,占內存,容易崩盤。

  1. # 打開文件進行讀取 
  2. f = open("1.txt","r",encoding='utf-8'
  3. # 根據大小讀取文件內容 
  4. print('輸出來自 read() 方法\n',f.read(2048)) 
  5. # 關閉文件 
  6. f.close() 
  7. # 打開文件進行讀寫 
  8. f = open("1.txt","r+",encoding='utf-8'
  9. # 讀取第2個字和第2行行的文件內容 
  10. print('輸出來自 readline() 方法\n',f.readline(2)) 
  11. print('輸出來自 readlines() 方法\n',f.readlines(2)) 
  12. # 關閉文件 
  13. f.close() 
  14. # 打開文件進行讀取和附加 
  15. f = open("1.txt","r",encoding='utf-8'
  16. # 打開文件進行讀取和附加 
  17. print('輸出來自 readlines() 方法\n',f.readlines()) 
  18. # 關閉文件 
  19. f.close() 
  20.  
  21. # 輸出如下 
  22. 輸出來自 read() 方法 
  23.  關注《Python之王》公眾號 
  24. 作者:Runsen 
  25. 輸出來自 readline() 方法 
  26.  關注 
  27. 輸出來自 readlines() 方法 
  28.  ['《Python之王》公眾號\n'
  29. 輸出來自 readlines() 方法 
  30.  ['關注《Python之王》公眾號\n''作者:Runsen'

寫入文件

下面只介紹清除寫 w和追加寫 a

案例:將關注《Python之王》公眾號寫入 test.txt 文件中

  1. # mode=w 沒有文件就創建,有就清除內容,小心使用 
  2. with open('test.txt''w', encoding='utf-8'as fb: 
  3.       fb.write('關注《Python之王》公眾號\n')   

下面再將作者:Runsen寫入test.txt 文件中

  1. with open('test.txt''w', encoding='utf-8'as fb: 
  2.       fb.write('作者:Runsen\n')   

運行后會發現之前寫的關注《Python之王》公眾號內容修改為作者:Runsen,因為 w模式會清除原文件內容,所以小心使用。只要使用了w,就要一次性寫完。

追加寫 a

 

案例:將靜夜思這首詩追加到 test.txt 文件中

  1. # mode=a 追加到文件的最后 
  2. with open('test.txt''a', encoding='utf-8'as fb: 
  3.       fb.write('關注《Python之王》公眾號\n')   
  4. with open('test.txt''a'encoding='utf-8'as fb: 
  5.       fb.write('作者:Runsen\n')       

指針操作

事物或資源都是以文件的形式存在,比如消息、共享內存、連接等,句柄可以理解為指向這些文件的指針。

句柄(handle)是一個來自編譯原理的術語,指的是一個句子中最先被規約的部分,所以帶有一個「句」字。

句柄的作用就是定位,兩個APi還是tell和seek。

tell返回文件對象在文件中的當前位置,seek將文件對象移動到指定的位置,傳入的參數是offset ,表示移動的偏移量。

 

下面通過示例對上述函數作進一步了解,如下所示:

  1. with open('test.txt''rb+'as f: 
  2.     f.write(b'Runsen'
  3.     # 文件對象位置 
  4.     print(f.tell()) 
  5.     # 移動到文件的第四個字節 
  6.     f.seek(3) 
  7.     # 讀取一個字節,文件對象向后移動一位 
  8.     print(f.read(1)) 
  9.     print(f.tell()) 
  10.     # whence 為可選參數,值為 0 表示從文件開頭起算(默認值)、值為 1 表示使用當前文件位置、值為 2 表示使用文件末尾作為參考點 
  11.     # 移動到倒數第二個字節 
  12.     f.seek(-2, 2) 
  13.     print(f.tell()) 
  14.     print(f.read(1)) 
  15.      
  16. #輸出如下 
  17. b's' 
  18. 50 

上下文管理

我們會進行這樣的操作:打開文件,讀寫,關閉文件。程序員經常會忘記關閉文件。上下文管理器可以在不需要文件的時候,自動關閉文件,使用with open即可。

  1. with context manager 
  2. with open("new.txt""w"as f: 
  3.     print(f.closed) 
  4.     f.write("Hello World!"
  5. print(f.closed) 
  6.  
  7. #輸出如下 
  8. False 
  9. True 

如何批量讀取多個文件

下面,批量讀取某文件夾下的txt文件

  1. file_list = ['1.txt''2.txt''3.txt','4.txt'
  2. for path in file_list: 
  3.     with open(path, encoding='utf-8'as f: 
  4.         for line in f: 
  5.             print(line) 

下面將批量讀取文件夾下的txt文件的內容,合并內容到一個新文件5.txt中,具體實現的代碼如下。

  1. import os 
  2. #獲取目標文件夾的路徑 
  3. filedir = os.getcwd()+'\\'+'\\txt' 
  4. #獲取當前文件夾中的文件名稱列表 
  5. filenames = [] 
  6. for i in os.listdir(filedir): 
  7.     if i.split(".")[-1] == 'txt'
  8.         filenames.append(i) 
  9. #打開當前目錄下的5.txt文件,如果沒有則創建 
  10. f = open('5.txt','w'
  11. #先遍歷文件名 
  12. for filename in filenames: 
  13.     filepath = filedir+'\\'+filename 
  14.     #遍歷單個文件,讀取行數 
  15.     for line in open(filepath,encoding='utf-8'): 
  16.         f.writelines(line) 
  17.         f.write('\n'
  18. #關閉文件 
  19. f.close() 

其實在Window中只需要cd 至目標文件夾,即你需要將所有想要合并的txt文件添加至目標文件夾中,執行如下DOS命令 type *.txt > C:\目標路徑\合并后的文件名.txt

練習

題目:創建文件data.txt,文件共100000行,每行存放一個1~100之間的整數,題目來源:牛客

  1. import random 
  2.  
  3. f = open(‘data.txt’,‘w+’) 
  4. for i in range(100000): 
  5.   f.write(str(random.randint(1,100)) + ‘\n’) 
  6.   f.seek(0) 
  7.   print(f.read()) 
  8.   f.close() 

題目:生成100個MAC地址并寫入文件中,MAC地址前6位(16進制)為01-AF-3B,題目來源:牛客

  1. import random 
  2. import string 
  3.  
  4. def create_mac(): 
  5.   MAC='01-AF-3B' 
  6.   hex_num =string.hexdigits #0123456789abcdefABCDEF 
  7.   for i in range(3): 
  8.     n = random.sample(hex_num,2) 
  9.     sn = '-' + ''.join(n).upper() 
  10.     MAC += sn 
  11.   return MAC 
  12.  
  13. def main(): 
  14.   with open('mac.txt','w'as f: 
  15.     for i in range(100): 
  16.       mac = create_mac() 
  17.       print(mac) 
  18.       f.write(mac+'\n'
  19.  
  20. main() 

本文已收錄 GitHub,傳送門~[1] ,里面更有大廠面試完整考點,歡迎 Star。

責任編輯:姜華 來源: Python之王
相關推薦

2020-12-26 16:51:12

Python操作符開發

2023-10-23 12:35:36

Golang追加操作

2020-11-11 08:24:06

collection

2020-11-06 13:42:59

itertools

2020-11-12 08:52:16

Python

2023-11-27 15:08:52

Python編程語言

2010-03-23 16:30:47

Python文件復制

2018-05-28 09:20:10

Python迭代for循環

2020-09-17 12:34:54

Python文件操作

2016-08-31 15:50:50

PythonThreadLocal變量

2024-05-08 13:49:10

MongoDB版本系統

2024-03-15 09:44:17

WPFDispatcherUI線程

2023-11-30 16:05:17

2012-11-23 16:46:12

LinuxVim

2010-04-08 16:49:36

Unix操作系統

2020-11-10 08:45:35

Python

2024-10-12 15:18:05

PythonAPI操作系統

2016-11-07 21:59:52

threadpython

2020-11-04 09:23:57

Python

2016-08-31 15:41:19

PythonThreadLoca變量
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色综合久久久 | 亚洲国产aⅴ成人精品无吗 综合国产在线 | 91av在线免费播放 | 99精品国产一区二区三区 | 人人澡视频| 国产69久久精品成人看动漫 | 国产精品成人国产乱一区 | 成人av免费 | 免费在线黄 | 九九久久精品 | 亚洲精品99 | 色婷婷综合成人av | 欧美成人免费 | 美日韩免费视频 | 97精品一区二区 | 国产一级大片 | 国产清纯白嫩初高生视频在线观看 | 黄色免费在线网址 | 欧美日韩亚洲国产 | 欧美激情一区二区三区 | 99热在线播放 | 成人在线免费视频 | 一区二区三区在线观看视频 | 99精品国产在热久久 | 国内精品久久久久久久影视简单 | 一区二区久久 | 一区二区三区四区免费视频 | 成人国产精品久久久 | 国产乱性| 成人一区二区三区视频 | 日韩精品久久久久久 | 国产亚洲精品综合一区 | www.99热这里只有精品 | 欧美精品福利 | 91中文字幕在线 | 色888www视频在线观看 | 国产成人jvid在线播放 | 99久久久久久| 亚洲高清成人 | 欧美日韩亚洲一区 | 精品一区二区三区在线观看 |