无法从Jupyter Notebook压缩文件

3

我尝试压缩文件,参考了 https://thispointer.com/python-how-to-create-a-zip-archive-from-multiple-files-or-directory/ 上的示例。

with ZipFile('sample2.zip', 'w') as zipObj2:

   # Add multiple files to the zip
   zipObj2.write('sample_file.csv')

创建了sample2.zip,但是它是空的。当然,csv文件存在且不为空。
  • 我从Jupyter Notebook运行此代码。

编辑:我使用相对路径 -

input_dir = "../data/example/" 
with zipfile.ZipFile(os.path.join(input_dir, 'f.zip'), 'a') as zipObj2: 
zipObj2.write(os.path.join(input_dir, 'f.tif'))

你确定 sample_file.csv 文件和 sample2.zip 压缩包在同一个文件夹里吗? - Giova
是的,该文件夹包含sample_file.csv文件,并且输出文件(sample2.zip)保存在同一位置。 - obar
你的代码在我使用 Py2.7、3.6 和 3.8 版本时都能正常工作。 - Maurice Meyer
它在Jupyter Notebook上也能工作吗?有可能会引起问题吗? - obar
@obart 我也会检查文件夹的写入权限以及从“文件/信任笔记本”中信任笔记本。 - Giova
显示剩余3条评论
3个回答

2
你试图关闭zip文件以保存吗?
from zipfile import ZipFile

with ZipFile('sample2.zip', 'w') as zipObj2:
   zipObj2.write('sample_file.csv')
   zipObj2.close()

with语句的目的是什么? - Giova
虽然不是完全了解,但肯定知道它用于创建、读取和覆盖文件。我查看了zipfile的教程。 - sametsokel
基本上,它允许支持它的类的对象自动关闭调用;因此,在上面的代码中它是无用的。根据dunder exit的实现方式,它甚至可能是危险的。 - Giova
你可能是正确的。这可能是因为zipfile的版本不同,我在我的jupyter笔记本上尝试了这段代码,没有关闭zip文件,它返回了一个空的zip文件。当我关闭它时,我达到了我的目标。 - sametsokel

0

我有点困惑你的问题,但如果我理解正确的话,似乎你正在尝试将多个CSV文件放入单个压缩文件中?如果是这样,那么你需要做的就是:

#initiate files variable that contains the directory from which you wish to zip csv files
files=[f for f in os.listdir("./your_directory") if f.endswith('.csv')]

#initalize empty DataFrame 
all_data = pd.DataFrame()

#iterate through the files variable and concatenate them to all_data 
for file in files:
df = pd.read_csv('./your_directory' + file)
all_data = pd.concat([all_data, df])

然后调用你的新DataFrame(all_data)来验证内容是否被传输。

我正在尝试创建一个包含CSV文件的新的.zip文件。 - obar

0
这段代码片段允许您仅压缩特定的文件类型。
import os import shutil from unittest.mock import patch

_os_path_isfile = os.path.isfile


def accept(path):
    file_name, file_extension = os.path.splitext(path)
    if file_extension not in [".py", ".ipynb"]:
        return False
    print("archiving %r" % path)
    return _os_path_isfile(path)



with patch("os.path.isfile", side_effect=accept):
    shutil.make_archive("archive_file_name", "zip", ".")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接