檔案騰轉挪移操作,那都不是事兒
最近公眾號內推送了我的系列視訊教程《 python文字分析:從入門到精通 》,這個課程的分享原則是隻講最簡單最好用的知識,用最少的時間去解決最頭疼的問題。這樣對於 人文社科類 的 python初學者 會降低認知壓力,增強學習自信。
今天我們彙總整理下檔案讀寫的一些事情,對文字分析系列課做一些有意義的補充。涉及到的庫包括os、shutil、zipfile
獲取資訊
程式碼 | 功能 |
---|---|
os.getcwd("path") |
獲取程式碼當前工作路徑 |
os.listdir("path") |
獲取當前工作資料夾內的資料夾或檔案 |
os.scandir("path") |
獲取當前工作資料夾內的資料夾或檔案 |
os.walk(top) |
通過在top中游走輸出在top中的檔名,向上或者向下。每次遍歷物件返回的是三元組(root,dirs,files) |
改變檔案系統
檔案系統因為下面的操作發生變化,比如壓縮解壓、新建資料夾、複製移動、移除
程式碼 | 功能 |
---|---|
os.chdir("path") |
更改當前工作路徑為path |
os.path.join(dir1,dir2,dir3,...) |
路徑拼接為dir1/dir2/dir3 |
os.makedirs("dir1/dir2") |
建立資料夾 |
os.remove("my_file_path") |
移除一個檔案 |
os.rmdir("path") |
會刪除path路徑資料夾,如果path內有檔案,移除path會報錯 |
os.rename("old", "new") |
對old這個檔案或者路徑更改為新名new |
shutil.copy("source", "destination") |
複製一個檔案或者資料夾(source)到另外一個資料夾(destination) |
shutil.move("source", "destination") |
移動一個檔案或者資料夾(source)到另外一個資料夾(destination) |
shutil.rmtree("my_directory_path") |
移除一個資料夾及其內部的所有檔案和資料夾 |
壓縮與解壓
程式碼 | 功能 |
---|---|
dzipfile.ZipFile('zip檔案.zip', 'w') |
新建zip檔案 |
zipfile.ZipFile('zip檔案.zip', 'r') |
開啟zip檔案 |
一、獲取資訊
1.1 os.getcwd()
獲取當前工作路徑
import os
os.getcwd()
執行得到
'/Users/suosuo/Desktop/20190224檔案系統操作方法概括'
1.2 os.listdir()
獲取當前工作資料夾內的資料夾或檔案
os.listdir()
得到
['.DS_Store', '未命名.ipynb', '.ipynb_checkpoints', 'data', 'data2']
1.3 os.scandir()
獲取當前工作資料夾內的資料夾或檔案。類似於os.listdir(),但是返回的是可迭代物件
os.scandir()
執行結果
<posix.ScandirIterator at 0x1074b5090>
遇到上面的,我們就要想到for迴圈迭代,看看ta是什麼鬼
for f in os.scandir():
if not f.is_file(): #is_file判斷是否是檔案
print('這是資料夾:',f)
else:
print('這是檔案:', f)
#print(type(f), f)
這是檔案: <DirEntry '.DS_Store'>
這是檔案: <DirEntry '未命名.ipynb'>
這是資料夾: <DirEntry '.ipynb_checkpoints'>
這是資料夾: <DirEntry 'data'>
這是資料夾: <DirEntry 'data2'>
1.4 os.walk()
隨機漫走
os.walk(top='data')
執行得到
<generator object walk at 0x1073d4c78>
得到生成器的資料,也是要想到for迴圈迭代
for x in os.walk(top='.'):
print(x)
('.', ['.ipynb_checkpoints', 'data', 'data2'], ['.DS_Store', '未命名.ipynb'])
('./.ipynb_checkpoints', [], ['未命名-checkpoint.ipynb'])
('./data', ['test'], ['.DS_Store'])
('./data/test', [], ['.DS_Store', '學習檔案操作.txt'])
('./data2', [], [])
二、改變檔案系統
2.1 os.chdir()
變換工作路徑
print(os.getcwd())
os.chdir('/Users/suosuo/Desktop')
os.getcwd()
/Users/suosuo/Desktop/20190224檔案系統操作方法概括
'/Users/suosuo/Desktop'
2.2 os.path.join()
拼接多個字串,形成新的路徑字串。os.path.join()內不能傳入tuple
os.path.join('desktop', 'data', 'python學習.md')
執行得到
'desktop/data/python學習.md'
下面的程式碼,是個bug
path = ('desktop', 'data', 'python學習', '筆記.md')
os.path.join(path)
---------------------------------------------------------------------------
TypeErrorTraceback (most recent call last)
<ipython-input-17-9bb1ad13c0bb> in <module>
1 path = ('desktop', 'data', 'python學習', '筆記.md')
----> 2 os.path.join(path)
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/posixpath.py in join(a, *p)
78will be discarded.An empty last part will result in a path that
79ends with a separator."""
---> 80a = os.fspath(a)
81sep = _get_sep(a)
82path = a
TypeError: expected str, bytes or os.PathLike object, not tuple
2.3 os.makedirs()
建立新的資料夾
os.chdir('20190224檔案系統操作方法概括')
os.makedirs('data2')
2.4 os.remove()
移除一個檔案
os.remove('data/移除.txt')
2.5 os.rmdir()
移除資料夾,但是這個被移除的資料夾必須是空的才能移除
#test內有檔案,所以移除會報錯
os.rmdir('data/test')
---------------------------------------------------------------------------
OSErrorTraceback (most recent call last)
<ipython-input-32-dc6cea8f9fda> in <module>
----> 1 os.rmdir('data/test')
OSError: [Errno 66] Directory not empty: 'data/test'
2.6 os.rename(old, new)
將old檔名(或路徑)改為new檔名(或者路徑)
os.rename('data/test/重新命名rename.txt', 'data/test/重新命名rename2.txt')
2.7 shutil.copy(src, dst)
將src複製到dst中
import shutil
shutil.copy('data/移除.txt', 'data2')
data2資料夾中多了一個 "移除.txt"
2.8 shutil.move(src, dst)
將src移動到dst中
shutil.move('data/dong.txt', 'data2')
data資料夾中的dong.txt消失了,data2中出現了dong.txt檔案
2.9 shutil.rmtree()
移動一個資料夾內的全部檔案和資料夾
shutil.rmtree('data2')
三、壓縮與解壓
這部分內容實際上之前分享過 檔案的壓縮與解壓庫-zipfile、tarfile ,今天就當複習一下吧。zipfile和tarfile是python內建庫
3.1 新建zip檔案
對data資料夾進行壓縮
import zipfile
#將 “三體.txt” 壓縮到 “三體.zip”中
with zipfile.ZipFile('三體.zip', 'w') as z:
#請注意這裡寫的是當前資料夾下的檔名
z.write('三體第一部.txt')
z.write('三體第二部.txt')
z.write('三體第三部.txt')
當前資料夾中出現 “三體.zip” 檔案
3.2 解壓zip檔案
with zipfile.ZipFile('三體.zip', 'r') as z:
# 檢視壓縮包中的檔案列表
print(z.namelist())
# 解壓 “三體.zip”中的 “三體第一部.txt”檔案
z.extract('三體第一部.txt')
# 解壓,在當前資料夾下會出現一個名為"三體extractall"的資料夾
z.extractall('三體extractall')
['三體第一部.txt', '三體第二部.txt', '三體第三部.txt']
當前資料夾出現一個 “三體extractall” 資料夾
回覆關鍵詞 “20190225” ,得到本文jupyter notebook下載連結
AD、轉發、好看