我想获取以.npy或csv结尾的目录中的所有文件(我在执行了几次for循环后到达了该目录-因此是fourth.path),然后压缩这些文件。我的代码运行时只将一个文件放入zip文件中。我做错了什么?我尝试更改缩进,但没有创建zip文件
import json
import os
import zipfile
import zlib
directory = os.path.join(os.getcwd(), 'recs')
radarfolder = 'RadarIfxAvian'
file = os.listdir(directory)
def r(p, name):
p = os.path.join(p, name)
return p.replace("/", "\\")
#This code will list all json files in e ach file
for first in os.scandir(directory):
if first.is_dir():
for second in os.scandir(first.path):
if second.is_dir():
for third in os.scandir(second.path):
if third.is_dir():
radar_folder_name = ''
list_files = ()
for fourth in os.scandir(third.path):
if fourth.is_dir():
if radarfolder in fourth.path:
radar_folder_name = fourth.path
print(radar_folder_name)
list_files = ()
for file in os.listdir(fourth.path):
if file.endswith(".npy") | file.endswith(".csv"):
list_files = (file)
print(list_files)
with zipfile.ZipFile(radar_folder_name +'\\' +'radar.zip', 'w', compression=zipfile.ZIP_DEFLATED ) as zipMe:
zipMe.write(radar_folder_name +'\\' +list_files)
zipMe.close()
我尝试更改缩进,导致错误:TypeError:只能将str(而不是“tuple”)连接到str或未创建zip文件
3条答案
按热度按时间gpnt7bae1#
正如我在第二条评论中所说的,你的问题来自于你的压缩语句中的'w'参数。它导致了每次打开zip文件时都被覆盖,你压缩每个文件时都会这样做。你可以用两种方法来解决这个问题(至少):
我冒昧地重写了代码中查找“RadarIfxAvian”文件夹的部分,因为嵌入式
for
很笨拙(如果文件夹结构发生变化,它们可能无法工作),将其替换为多用途递归函数。请注意,文件夹结构将包含在.zip中;如果你只想压缩文件本身,考虑在压缩文件之前执行
os.chdir(radar_folder_name)
。pqwbnv8z2#
如果我对代码的理解正确的话,您正在查找一个文件夹“RadarIfxAvian”,并希望在该文件夹中放置一个.ZIP文件,其中包含该目录中的任何.CSV或.NPY文件,这应该与使用
os.walk
进行递归搜索等效:2izufjch3#
我使用以下步骤调整了代码:
1.将if放入函数中
1.通过循环遍历我追加的列表中的每一项来编写zip