批量去除文本中空行的脚本

wen 实用脚本 1

本文目录导读:

批量去除文本中空行的脚本

  1. 使用说明
  2. 功能特点
#!/usr/bin/env python3
"""
批量去除文本文件中的空行(包括仅含空白字符的行)
支持单个文件或文件夹批量处理
"""
import os
import sys
import argparse
def remove_empty_lines(text):
    """
    去除文本中的空行和仅含空白字符的行
    返回处理后的文本
    """
    lines = text.splitlines()
    # 过滤掉空行或仅含空白字符的行
    non_empty_lines = [line for line in lines if line.strip()]
    return '\n'.join(non_empty_lines)
def process_file(input_path, output_path=None, inplace=False):
    """
    处理单个文件
    :param input_path: 输入文件路径
    :param output_path: 输出文件路径(None时覆盖原文件)
    :param inplace: 是否直接修改原文件
    """
    try:
        with open(input_path, 'r', encoding='utf-8') as f:
            content = f.read()
    except UnicodeDecodeError:
        # 若UTF-8解码失败,尝试使用系统默认编码
        with open(input_path, 'r', encoding='latin-1') as f:
            content = f.read()
    except Exception as e:
        print(f"读取文件失败 {input_path}: {e}")
        return False
    new_content = remove_empty_lines(content)
    # 确定输出路径
    if inplace:
        output_path = input_path
    elif output_path is None:
        # 默认在原文件名后添加 _no_empty
        base, ext = os.path.splitext(input_path)
        output_path = f"{base}_no_empty{ext}"
    try:
        with open(output_path, 'w', encoding='utf-8') as f:
            f.write(new_content)
        print(f"处理完成: {input_path} -> {output_path}")
        return True
    except Exception as e:
        print(f"写入文件失败 {output_path}: {e}")
        return False
def process_directory(directory, pattern="*.txt", inplace=False):
    """
    批量处理文件夹中所有匹配的文件
    :param directory: 文件夹路径
    :param pattern: 文件匹配模式,默认处理所有txt文件
    :param inplace: 是否直接修改原文件
    """
    import glob
    # 支持简单的通配符匹配
    search_path = os.path.join(directory, pattern)
    files = glob.glob(search_path)
    if not files:
        print(f"在 {directory} 中未找到匹配 {pattern} 的文件")
        return
    print(f"找到 {len(files)} 个文件,开始处理...")
    for file_path in files:
        if os.path.isfile(file_path):
            process_file(file_path, inplace=inplace)
def main():
    parser = argparse.ArgumentParser(
        description="批量去除文本文件中的空行(包括仅含空白字符的行)",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
示例用法:
  # 处理单个文件,输出到新文件
  python remove_empty_lines.py input.txt
  # 处理单个文件,直接覆盖原文件
  python remove_empty_lines.py input.txt --inplace
  # 处理单个文件,指定输出路径
  python remove_empty_lines.py input.txt -o output.txt
  # 批量处理当前目录所有txt文件(覆盖原文件)
  python remove_empty_lines.py . --pattern "*.txt" --inplace
  # 批量处理指定目录所有log文件(输出到新文件)
  python remove_empty_lines.py /path/to/logs --pattern "*.log"
        """
    )
    parser.add_argument(
        "path",
        help="文件路径或文件夹路径"
    )
    parser.add_argument(
        "-o", "--output",
        help="输出文件路径(仅单文件模式有效)"
    )
    parser.add_argument(
        "--pattern",
        default="*.txt",
        help="批量处理时的文件匹配模式,默认 *.txt"
    )
    parser.add_argument(
        "--inplace",
        action="store_true",
        help="直接修改原文件(不生成新文件)"
    )
    args = parser.parse_args()
    if os.path.isfile(args.path):
        # 单文件模式
        process_file(args.path, args.output, inplace=args.inplace)
    elif os.path.isdir(args.path):
        # 目录模式 - 批量处理
        if args.output and not args.inplace:
            print("警告: 目录模式下 -o 参数将被忽略,使用 --inplace 或默认命名方式")
        process_directory(args.path, args.pattern, inplace=args.inplace)
    else:
        print(f"错误: 路径不存在 {args.path}")
        sys.exit(1)
if __name__ == "__main__":
    main()

使用说明

  1. 保存脚本:将上述代码保存为 remove_empty_lines.py
  2. 运行环境:需要 Python 3 环境
  3. 基本用法
    • 处理单个文件:python remove_empty_lines.py 文件路径
    • 处理单个文件并覆盖原文件:python remove_empty_lines.py 文件路径 --inplace
    • 批量处理文件夹内所有txt文件:python remove_empty_lines.py 文件夹路径

功能特点

  • 去除所有空行(包括只包含空格、制表符等空白字符的行)
  • 支持单个文件文件夹批量处理
  • 自动处理编码问题(优先UTF-8,失败时尝试latin-1)
  • 默认生成新文件(在原文件名后添加 _no_empty),或选择直接覆盖原文件

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