python - 压缩文件并保存到特定文件夹
问题描述
这可能是一个愚蠢的问题,但我正在努力寻找解决方案。
所以我在给定文件夹中有一个文件:
Output\20190101_0100\20190101_0100.csv
现在我想压缩文件并将其保存到相同的位置。所以这是我的尝试:
zipfile.ZipFile('Output/20190101_0100/20190101_0100_11.zip', mode='w', compression=zipfile.ZIP_DEFLATED).write('Output/20190101_0100/20190101_0100_11.csv')
但它正在制作一个文件夹内部 zip 文件夹并保存它,如下所示:
Output\20190101_0100\20190101_0100_11.zip\Output\20190101_0100\20190101_0100_11.csv
有人可以告诉我如何将我的文件直接保存在下面提到的相同位置或位置:
Output\20190101_0100\20190101_0100_11.zip\20190101_0100_11.csv
解决方案
问题的改写
这个问题有点令人困惑,因为Output\20190101_0100\20190101_0100_11.zip\Output\20190101_0100\20190101_0100_11.csv
它不是文件,而是Output\20190101_0100\20190101_0100_11.csv
zip 文件中的一个文件Output\20190101_0100\20190101_0100_11.zip
(如果我没记错的话)
只是为了重申您的问题(如果我理解正确的话):
- 你有一个文件
Output\20190101_0100\20190101_0100.csv
(->子目录20190101_0100.csv
中的一个文件)Output
20190101_0100
- 您要创建 zip 文件
Output/20190101_0100/20190101_0100_11.zip
(20190101_0100_11.zip
在Output
->20190101_0100.zip
目录中) - 您想要添加上述 CSV 文件
Output\20190101_0100\20190101_0100.csv
但没有前导路径,即 as20190101_0100_11.csv
而不是Output\20190101_0100\20190101_0100.csv
.
或者为了不与太多类似的目录混淆,让我们将其简化为:
- 您
test.csv
在子目录中有一个文件sub-folder
- 您要创建 zip 文件
test.zip
- 您想要添加上述 CSV 文件
test.csv
但没有前导路径,即 astest.csv
而不是sub-folder/test.csv
.
回答
从ZipFile.write文档中:
将名为filename的文件写入存档,并为其指定存档名称arcname(默认情况下,这将与filename相同,但没有驱动器号并删除了前导路径分隔符)。
这意味着arcname
它将默认为传入的filename
(它没有驱动器号或前导路径分隔符)。
如果要删除子文件夹部分,也只需传入arcname
。例如:
import zipfile
with zipfile.ZipFile('path-to-zip/test.zip', 'w') as zf:
zf.write('sub-folder/test.csv', arcname='test.csv')
推荐阅读
- sql - 当我尝试将单词与与日期 sql plus 相关的方程连接时
- math - 我如何将多项式拟合到给定范围内的给定点集?(最好不用电脑手动完成)
- powershell - Powershell 停止处理许多实例
- c++ - 头文件和makefile如何帮助c++中的增量编译?
- swift - 如何防止 UIView drawHierarchy 阻止或冻结正在进行的动画
- django - 将属性从 ModelForm.clean() 传递给 Model.save() 的最佳实践
- python-3.x - 如何通过 pyinstaller 使用 Windows 版本数据
- excel - 将数字拆分为范围
- javascript - ReferenceError:在 Jest 环境被拆除后,您正在尝试“导入”文件:在 loadCjsDefault
- android - 调用 setText("") 应用程序崩溃或如何设置 CharSequence NULL 值