保存跑一趟红Python

import os
import json# 配置参数BATCH_SIZE = 100 # 每批处理的文件数量CHECKPOINT_FILE = 'checkpoint.json’ERROR_LOG_FILE = ‘error_log.json’ # 记录失败文件名的日志文件SOURCE_FOLDER = ‘path/to/your/folder’ # 替换为你的文件夹路径def process_file(file_path): “”" 在这里放置你对单个文件的处理逻辑。 例如:压缩文件、转换格式等。 “”" print(f"Processing file: {file_path}") # 模拟文件处理可能会失败的情况 if not os.path.exists(file_path): raise FileNotFoundError(f"{file_path} does not exist")def read_checkpoint(): “”“读取检查点文件,返回开始处理的索引”"" if not os.path.exists(CHECKPOINT_FILE): return {‘index’: 0, ‘failed_files’: []} with open(CHECKPOINT_FILE, ‘r’) as f: checkpoint_data = json.load(f) return checkpoint_datadef write_checkpoint(index, failed_files): “”“写入检查点文件,记录下一批开始的位置和失败文件列表”"" with open(CHECKPOINT_FILE, ‘w’) as f: json.dump({‘index’: index, ‘failed_files’: failed_files}, f)def log_failed_files(failed_files): “”“记录失败文件到日志文件”"" with open(ERROR_LOG_FILE, ‘w’) as f: json.dump(failed_files, f, indent=4)def main(): # 获取文件列表并排序以确保每次运行时顺序一致 files = sorted([os.path.join(SOURCE_FOLDER, f) for f in os.listdir(SOURCE_FOLDER) if os.path.isfile(os.path.join(SOURCE_FOLDER, f))]) checkpoint_data = read_checkpoint() start_from_index = checkpoint_data[‘index’] failed_files = checkpoint_data.get(‘failed_files’, []) for i, file_path in enumerate(files[start_from_index:], start=start_from_index): try: process_file(file_path) # 如果处理完一批或者到达最后一个文件,则更新检查点 if (i + 1) % BATCH_SIZE == 0 or i == len(files) - 1: write_checkpoint(i + 1, failed_files) print(f"Batch completed. Next batch will start from index: {i + 1}") except Exception as e: print(f"Error processing file: {file_path}") print(e) failed_files.append({ ‘file’: file_path, ‘error’: str(e) }) # 继续处理其他文件 # 最后一次更新检查点(确保包括最后一批文件) write_checkpoint(len(files), failed_files) log_failed_files(failed_files) print(“All batches processed. Failed files logged.”)if name == “main”: main()

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class FolderToZip {

private static final int BUFFER_SIZE = 4096;

public static void main(String[] args) {
    // 文件夹路径和输出ZIP文件路径
    String sourceFolder = "path/to/your/folder"; // 替换为你的文件夹路径
    String outputZipFile = "path/to/your/output.zip"; // 替换为你的输出ZIP文件路径

    File directory = new File(sourceFolder);
    File[] files = directory.listFiles();

    try (FileOutputStream fos = new FileOutputStream(outputZipFile);
         ZipOutputStream zos = new ZipOutputStream(fos)) {

        if (files != null) {
            for (File file : files) {
                if (!file.isDirectory()) { // 确保只添加文件而不是子目录
                    addToZip(directory, file, zos);
                }
            }
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

private static void addToZip(File rootPath, File fileToAdd, ZipOutputStream zos) throws IOException {
    try (FileInputStream fis = new FileInputStream(fileToAdd)) {
        // 创建ZIP条目并将其添加到输出流
        String zipEntryName = fileToAdd.getPath().replace(rootPath.getPath(), "");
        ZipEntry zipEntry = new ZipEntry(zipEntryName.startsWith("/") ? zipEntryName.substring(1) : zipEntryName);
        zos.putNextEntry(zipEntry);

        // 将数据写入ZIP条目
        byte[] buffer = new byte[BUFFER_SIZE];
        int length;
        while ((length = fis.read(buffer)) >= 0) {
            zos.write(buffer, 0, length);
        }

        zos.closeEntry();
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值