脚本如何实现文件内容合并功能

wen 实用脚本 1

本文目录导读:

脚本如何实现文件内容合并功能

  1. Python 实现(最灵活)
  2. 批处理脚本 (Windows)
  3. Bash 脚本 (Linux/Mac)
  4. Node.js 实现
  5. PowerShell 脚本
  6. 高级功能版本(Python)
  7. 注意事项:

Python 实现(最灵活)

#!/usr/bin/env python3
import os
import glob
def merge_text_files(input_files, output_file, separator="\n"):
    """合并多个文本文件"""
    with open(output_file, 'w', encoding='utf-8') as outfile:
        for i, file_path in enumerate(input_files):
            # 添加文件分隔标志(可选)
            if i > 0:
                outfile.write(separator)
            # 写入文件内容
            with open(file_path, 'r', encoding='utf-8') as infile:
                outfile.write(infile.read())
    print(f"成功合并 {len(input_files)} 个文件到 {output_file}")
# 使用示例
if __name__ == "__main__":
    # 方法1:指定文件列表
    files = ["file1.txt", "file2.txt", "file3.txt"]
    merge_text_files(files, "merged.txt")
    # 方法2:匹配通配符
    import glob
    log_files = glob.glob("logs/*.log")
    merge_text_files(log_files, "all_logs.txt")

批处理脚本 (Windows)

@echo off
setlocal enabledelayedexpansion
:: 合并所有txt文件到一个文件
set output_file=merged.txt
:: 清空或创建输出文件
type nul > %output_file%
:: 遍历并合并文件
for %%f in (*.txt) do (
    if not "%%f"=="%output_file%" (
        echo 合并文件: %%f
        type "%%f" >> %output_file%
        echo. >> %output_file%  :: 添加换行
    )
)
echo 文件合并完成!

Bash 脚本 (Linux/Mac)

#!/bin/bash
# 合并多个文件
output_file="merged.txt"
# 清空输出文件
> "$output_file"
# 合并所有txt文件(排除输出文件自身)
for file in *.txt; do
    if [ "$file" != "$output_file" ]; then
        echo "合并文件: $file"
        cat "$file" >> "$output_file"
        echo "" >> "$output_file"  # 添加换行
    fi
done
echo "文件合并完成!"

Node.js 实现

const fs = require('fs');
const path = require('path');
async function mergeFiles(inputFiles, outputFile) {
    const writeStream = fs.createWriteStream(outputFile);
    for (const filePath of inputFiles) {
        const readStream = fs.createReadStream(filePath);
        await new Promise((resolve, reject) => {
            readStream.pipe(writeStream, { end: false });
            readStream.on('end', () => {
                writeStream.write('\n'); // 添加分隔
                resolve();
            });
            readStream.on('error', reject);
        });
    }
    writeStream.end();
    console.log(`成功合并 ${inputFiles.length} 个文件`);
}
// 使用示例
const files = ['file1.txt', 'file2.txt', 'file3.txt'];
const pattern = require('glob');
pattern('logs/*.log', (err, files) => {
    if (!err) {
        mergeFiles(files, 'merged.log');
    }
});

PowerShell 脚本

# 合并所有txt文件
$outputFile = "merged.txt"
$files = Get-ChildItem -Path . -Filter "*.txt" | Where-Object { $_.Name -ne $outputFile }
# 清空输出文件
Clear-Content -Path $outputFile -Force
foreach ($file in $files) {
    Write-Host "合并文件: $($file.Name)"
    Get-Content $file.FullName | Add-Content $outputFile
    Add-Content $outputFile ""  # 添加空行分隔
}
Write-Host "文件合并完成!"

高级功能版本(Python)

import os
import glob
from datetime import datetime
class FileMerger:
    def __init__(self):
        self.options = {
            'add_filename': True,      # 添加文件名标记
            'add_timestamp': False,    # 添加时间戳
            'separator': '\n---\n',    # 文件分隔符
            'encoding': 'utf-8'
        }
    def merge(self, input_pattern, output_file, recursive=False):
        """高级文件合并功能"""
        # 获取文件列表
        files = glob.glob(input_pattern, recursive=recursive)
        files.sort()  # 排序
        with open(output_file, 'w', encoding=self.options['encoding']) as outfile:
            for i, file_path in enumerate(files):
                if i > 0:
                    outfile.write(self.options['separator'])
                # 添加文件信息
                if self.options.get('add_filename'):
                    filename = os.path.basename(file_path)
                    outfile.write(f"\n# 文件: {filename}\n")
                if self.options.get('add_timestamp'):
                    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                    outfile.write(f"# 合并时间: {timestamp}\n\n")
                # 写入文件内容
                with open(file_path, 'r', encoding=self.options['encoding']) as infile:
                    outfile.write(infile.read())
        return len(files)
# 使用示例
merger = FileMerger()
merger.options['add_filename'] = True
merger.options['separator'] = '\n\n# === 下一个文件 ===\n\n'
count = merger.merge("logs/*.log", "merged_logs.txt")
print(f"成功合并 {count} 个文件")

注意事项:

  1. 编码问题:处理中文文件时注意编码(UTF-8/GBK)
  2. 大文件处理:大文件建议使用流式处理(如 Node.js 的流)
  3. 文件排序:合并前应考虑文件顺序
  4. 文件大小:监控输出文件大小,避免磁盘溢出
  5. 二进制文件:文本合并方法不适用于二进制文件

选择哪种脚本取决于你的操作系统和具体需求,Python 版本最为通用且功能最完整。

抱歉,评论功能暂时关闭!