假設在目錄test1/test2
下有兩個檔案a.txt
和b.txt
test1
|--test2
| |--a.txt
| |--b.txt
|--test3
|--test4
現在需要將其壓縮至test1/test3
目錄下
很容易得到
def
tar_files
(file_name, from_path, to_path)
: tar_file = file_name +
'.tar.gz'
ifnot os.path.exists(to_path)
: os.makedirs(to_path)
tar = tarfile.
open
(os.path.join(to_path, tar_file)
,'w:gz'
)
files =
[os.path.join(from_path, item)
for item in os.listdir(from_path)
if os.path.isfile(os.path.join(from_path, item))]
# print(files)
forfile
in files:
tar.add(
file
) tar.close(
)def
tar_extract
(file_name, from_path, to_path)
: tar = tarfile.
open
(os.path.join(from_path, file_name)
,'r:gz')if
not os.path.exists(to_path)
: os.makedirs(to_path)
forfile
in tar.getnames():
tar.extract(
file
, to_path)
tar.close(
)
壓縮
tar_files(
'mytar'
,'test1/test2'
,'test1/test3'
)
然後將壓縮檔案解壓至test1/test4
目錄
tar_extract(
'mytar.tar.gz'
,'test1/test3'
,'test1/test4'
)
那麼問題來了
原本以為test4
目錄下直接是a.txt
和b.txt
檔案
結果發現解壓後的兩個檔案保留了原有目錄路徑
即,在test4
目錄下解壓成了test1/test2/a.txt
和test1/test2/b.txt
而不是單純的兩個檔案
經測試,這兩個檔案路徑與**中tar.add(file)
中的file
的檔案路徑是一致的
那麼只需要確保file
中的路徑只為檔案,不包含其所在目錄就行了
這時就需要os.chdir()
來切換工作目錄
切換至需要壓縮的檔案的目錄下
新增了一些功能
def
tar_files
(file_name, from_path, to_path, delete=
false):
''' 打包壓縮乙個目錄下的檔案
file_name: 生成的tar檔名,不需要有.tar.gz
from_path: 將from_path目錄下的檔案打包壓縮
to_path: 將tar檔案放在to_path目錄下
delete: 是否刪除from_path下的檔案,預設false
'''tar_file = file_name +
'.tar.gz'
ifnot os.path.exists(to_path)
: os.makedirs(to_path)
tar = tarfile.
open
(os.path.join(to_path, tar_file)
,'w:gz'
)# 記錄當前工作目錄
cur_path = os.getcwd(
)# 切換目錄
os.chdir(from_path)
files =
[item for item in os.listdir(
'.')
if os.path.isfile(item)
]for
file
in files:
tar.add(
file
) tar.close(
)if delete:
forfile
in files:
os.remove(
file
)# 切換回原來工作目錄
os.chdir(cur_path)
deftar_extract
(file_name, from_path, to_path, delete=
false):
''' 將壓縮檔案中的檔案提取出來
file_name: 對應壓縮檔案 ***.tar.gz
from_path: 壓縮檔案所在目錄
to_path: 將檔案提取至to_path目錄
delete: 是否刪除該壓縮檔案,預設false
'''tar = tarfile.
open
(os.path.join(from_path, file_name)
,'r:gz')if
not os.path.exists(to_path)
: os.makedirs(to_path)
forfile
in tar.getnames():
tar.extract(
file
, to_path)
tar.close(
)if delete:
os.remove(os.path.join(from_path, file_name)
)
python tarfile的路徑問題
假設有路徑 home somebody test1 test2 test3 該路徑下有3個檔案,a.txt,b.txt,c.txt 在目錄 home somebody下有如下 希望打包a.txt,b.txt,c.txt三個檔案 coding utf8 import json import gzip ...
cscope 加入路徑 全域性路徑
在使用cscope的時候,有時跳轉不過去,提示 driver x no such file 大概是這個吧 主要是因為在生成cscope.out的時候用的是相對路徑,然後vim就找不到了,然後就坑爹了。然後網上找了一下,找到了這個.vimrc片段 自動載入cscope.out if has cscop...
Codeup關鍵路徑 關鍵路徑
時間限制 1 sec 記憶體限制 128 mb 提交 261 解決 90 提交 狀態 討論版 命題人 外部匯入 描述 圖的連線邊上的資料表示其權值,帶權值的圖稱作網。上圖可描述為頂點集為 a,b,c,d,e 邊集及其權值為 始點,終點 權值 a b 3 a c 2 b d 5 c d 7 c e 4...