Python tarfile路徑問題

2021-10-14 05:53:04 字數 3446 閱讀 4037

假設在目錄test1/test2下有兩個檔案a.txtb.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.txtb.txt檔案

結果發現解壓後的兩個檔案保留了原有目錄路徑

即,在test4目錄下解壓成了test1/test2/a.txttest1/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...