首页 > 解决方案 > 进入子目录、运行命令并返回的最优雅的方式是什么?

问题描述

我有以下目录结构。

 data
│   ├── 2019-12-11
│   └── 2019-12-12
│       ├── ADAZ19.json
│       ├── BCHZ19.json

我想进去,从 os.system 运行一个 tar 命令,然后回到我开始的地方。

我尝试了如下方法:

# Full filepath from root.
import os
path_to_file = 'data/2019-12-12/' # This is generated dynamically.
file = 'ADAZ19.json' # This is generated dynamically.
cur_dir = os.getcwd()
os.system(f'tar -czf {cur_dir}{path_to_file}{file}.tar.gz {cur_dir}{path_to_file}{file}')

哪个没有用。所以现在我想进入path_to_file,直接在文件上运行 tar ,然后回到我开始的地方。注意,path_to_file由用户设置,不能硬编码。

我想进入子目录,这样目录结构就不会被文件拖住。最优雅的方法是什么?

标签: pythonoperating-systemglobtar

解决方案


用于"CHange DIRectory"更改文件夹

 os.chdir(folder)

import os

path_to_file = 'data/2019-12-12/'
file = 'ADAZ19.json'

cur_dir = os.getcwd()

os.chdir(path_to_file) # change folder

os.system(f'tar -czf {file}.tar.gz {file}')

os.chdir(cur_dir) # go back

编辑:但是您可以使用 python 标准模块tarfile来创建它。

然后你不必 chage 文件夹,但你必须使用第二个参数

add(added_file, name_in_tar_file)

设置没有路径的名称。

import tarfile

path_to_file = 'data/2019-12-12/'
file = 'ADAZ19.json'

t = tarfile.open(f'{path_to_file}{file}.tar.gz', mode='w:gz')

t.add(f'{path_to_file}{file}', file) # second argument without path to file

t.close()

推荐阅读