如何使用内置模块zipfile,想批量压缩当前文件夹中的所有文件?(语言-python)

问题遇到的现象和发生背景

win10 pycharm2021.3 python3.7 环境
运行程序后出现无线死循环,手动中止程序,发现压缩的zip包达到几个G

问题相关代码,请勿粘贴截图
import  os
with zipfile.ZipFile('spam.zip','w') as myzip:
    for i in os.listdir('./'):
        myzip.write(i)
        print(i,os.path.getsize(i))
运行结果及报错内容

手动结束程序的报错:

Traceback (most recent call last):
  File "F:/python_study/!!!!!!!modular_12/code/9.内置模块-压缩模块-zipfile.py", line 45, in <module>
    myzip.write(i)
  File "E:\Program Files\Python37\lib\zipfile.py", line 1722, in write
    shutil.copyfileobj(src, dest, 1024*8)
  File "E:\Program Files\Python37\lib\shutil.py", line 79, in copyfileobj
    buf = fsrc.read(length)
KeyboardInterrupt

Process finished with exit code 1
我的解答思路和尝试过的方法

个人理解:压缩包不能存放在当前文件夹, 不然for循环也会把生成的压缩包当作文件处理,从而造成无限循环
尝试1: 在函数zipfile.ZipFile中将参数file路径调整至被压缩目录的上级目录
尝试2: 在函数zipfile.ZipFile中添加参数zipfile.ZIP_DEFLATED可以解决

我想要达到的结果

想知道具体的原理及如何不改变file路径且不添加参数zipfile.ZIP_DEFLATED来完成批量压缩当前文件夹中的所有文件

添加判断条件,当文件后缀满足某个条件就写入,其他过滤掉:
if i.endswith('.txt'):myzip.write(i)
或者直接过滤掉不需要压缩的文件:

import os 
for f in os.listdir('.'):
    if not f.endswith('.zip'):
        print(f)

改下思路,如压缩包存在,删除。
先读当前文件列表,然后再建立zip 文件。
主要是确保压缩包文件,不在待压缩列表里。

import  os
import zipfile
from time import sleep

file_name = 'spam.zip'
# 如存在zip包,删除
if os.path.exists(file_name):
    print("删除",file_name)
    os.remove(file_name)
    sleep(5)

# 读当前文件列表
f_lst = os.listdir('./')
# 开始压缩文件
with zipfile.ZipFile(file_name,'w') as myzip:
    for i in f_lst:
        myzip.write(i)
        print(i,os.path.getsize(i))