python - 进入子目录、运行命令并返回的最优雅的方式是什么?
问题描述
我有以下目录结构。
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
由用户设置,不能硬编码。
我想进入子目录,这样目录结构就不会被文件拖住。最优雅的方法是什么?
解决方案
用于"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()
推荐阅读
- node.js - 在 1 列中按星期几查询 Sequelize 表,在另一列中按布尔值查询
- python - BeautifulSoup 不适用于 curl 输出
- chronicle-map - Chronicle Map vs 市场数据分销商,
- javascript - 如何通过单击 html 中的按钮来运行节点 js 文件(进行 api 调用并将数据放入工作表中)
- vb.net - 如何使用 Swagger REST API 将枚举完全反映到客户端代码
- ansible - Ansible 循环控制和 with_together 循环
- c# - EF核心无法创建表,sql语法错误
- r - 是否有使用其中一个元素对列表元素进行排序的 R 函数?
- javascript - 如何以编程方式将值输入到 devExtreme 列表搜索框并触发将像往常一样过滤列表的事件?
- php - 从 PHP 向 MS Teams 发送主动消息