我希望将所有文件放在一个以.npy或csv结尾的目录中(我是在执行了几次for循环之后才到达的--因此是四个.Path),然后压缩这些文件. 我的代码正在运行,只将一个文件放在压缩文件中.我做错了什么? 我try 更改缩进,但没有创建任何压缩文件

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()

我try 更改缩进,要么导致错误:TypeError:只能将字符串(不是"tuple")连接为字符串,要么没有创建任何压缩文件

推荐答案

正如我在第二条 comments 中所说的,你的问题来自于你压缩声明中的"w"论点.它会导致每次打开压缩包时都会覆盖它,这是您对压缩到的每个文件执行的操作.你至少可以用两种方法解决这个问题:

  • 将‘w’替换为‘a’;这样文件将被附加到您的压缩包中(副作用是,如果您多次这样做,文件将被添加不止一次).
  • 保留‘w’,但只打开一次压缩包,列出之前要压缩的所有文件.请参见下面的代码.

我已经冒昧地重写了你的代码中寻找‘RadarIfxAyan’文件夹的部分,因为Embedded for很笨拙(如果你的文件夹 struct 改变了,它们可能无法工作),用一个多用途的递归函数来取代它.

请注意,文件夹 struct 将包含在.zip中;如果您只想压缩文件本身,请考虑在压缩文件之前执行os.chdir(radar_folder_name).

# This function recursively looks for the 'filename' file or folder
# under 'start_path' and returns the full path, or an empty string if not found.
def find_file(start_path, filename):
    if filename in os.listdir(start_path):
        return start_path + '/' + filename
    for file in os.scandir(start_path):
        if not file.is_dir():
            continue
        if (deep_path:=find_file(start_path + '/' + file.name, filename)):
            return deep_path
    return ''

directory = os.path.join(os.getcwd(), 'recs')
radarfolder = 'RadarIfxAvian'

radar_folder_name = find_file(directory, radarfolder)
print(radar_folder_name)
list_files = []
for file in os.listdir(radar_folder_name):
    if file.endswith(".npy") or file.endswith(".csv"):
        list_files.append(file)
with zipfile.ZipFile(radar_folder_name + '/' + 'radar.zip', 'w', compression=zipfile.ZIP_DEFLATED ) as zipMe:
    for file in list_files:
        zipMe.write(radar_folder_name + '/' + file)

    

Python相关问答推荐

为什么sys.exit()不能与subproccess.run()或subprocess.call()一起使用

log 1 p numpy的意外行为

OR—Tools CP SAT条件约束

如何在Raspberry Pi上检测USB并使用Python访问它?

基于形状而非距离的两个numpy数组相似性

下三角形掩码与seaborn clustermap bug

使用Python异步地持久跟踪用户输入

查看pandas字符列是否在字符串列中

如何合并具有相同元素的 torch 矩阵的行?

Python—在嵌套列表中添加相同索引的元素,然后计算平均值

解决Geopandas和Altair中的正图和投影问题

在我融化极点数据帧之后,我如何在不添加索引的情况下将其旋转回其原始形式?

read_csv分隔符正在创建无关的空列

极点用特定值替换前n行

利用广播使减法更有效率

Sknowled线性回归()不需要迭代和学习率作为参数

如何从具有完整层次数据的Pandas框架生成图形?

如何更改网络中某条边的位置(&Q;)?

如何计算二十面体每条三角形边的中点

用考克斯回归的生存分析系列的真值是模棱两可的.