Python中如何设置文本line wrap、line height、letter spacing及50字符自动换行
Python文本文档批量格式化实现方案
普通纯文本(.txt)文件本身不支持存储行高、字间距这类排版样式,以下提供两种适用不同场景的实现方案
方案1:输出为可保留样式的DOCX文档(推荐)
依赖安装
执行以下命令安装操作docx的库:pip install python-docx
实现代码
from docx import Document from docx.shared import Pt import os # 可自定义参数 WRAP_LENGTH = 50 # 每行最多字符数 LETTER_SPACING = Pt(1.5) # 字间距,单位磅 LINE_SPACING = 1.5 # 行高倍数,也可以用Pt(xx)设置固定磅值 INPUT_FOLDER = "./txt_files" # 存放待处理txt的文件夹 OUTPUT_FOLDER = "./formatted_docs" # 创建输出文件夹 os.makedirs(OUTPUT_FOLDER, exist_ok=True) def split_by_length(text, max_len): """按最大长度拆分文本,英文不拆单词""" words = text.split() lines = [] current_line = [] current_len = 0 for word in words: word_len = len(word) + 1 # 算上单词后的空格 if current_len + word_len <= max_len + 1: # 多减1避免末尾多算空格 current_line.append(word) current_len += word_len else: lines.append(' '.join(current_line)) current_line = [word] current_len = word_len + 1 if current_line: lines.append(' '.join(current_line)) return lines # 批量处理所有txt文件 for filename in os.listdir(INPUT_FOLDER): if not filename.endswith(".txt"): continue # 读取txt内容 with open(os.path.join(INPUT_FOLDER, filename), 'r', encoding='utf-8') as f: content = f.read() # 拆分换行 formatted_lines = split_by_length(content, WRAP_LENGTH) # 生成docx doc = Document() # 设置全局样式 style = doc.styles['Normal'] style.paragraph_format.line_spacing = LINE_SPACING style.font.spacing = LETTER_SPACING # 写入内容 for line in formatted_lines: doc.add_paragraph(line) # 保存 output_name = os.path.splitext(filename)[0] + "_formatted.docx" doc.save(os.path.join(OUTPUT_FOLDER, output_name))
方案2:纯TXT模拟排版(无依赖,用字符模拟样式)
如果只能输出txt格式,可通过插入空格模拟字间距、插入空行模拟行高,实现代码如下:
import os # 自定义参数 WRAP_LENGTH = 50 # 原文本每行最多字符数 LETTER_SPACING_LEVEL = 1 # 字间距等级,1代表每个字符间插1个空格 LINE_SPACING_LEVEL = 1 # 行高等级,1代表每行之间加1个空行 INPUT_FOLDER = "./txt_files" OUTPUT_FOLDER = "./formatted_txt" os.makedirs(OUTPUT_FOLDER, exist_ok=True) def split_by_length(text, max_len): lines = [] for i in range(0, len(text), max_len): lines.append(text[i:i+max_len]) return lines for filename in os.listdir(INPUT_FOLDER): if not filename.endswith(".txt"): continue with open(os.path.join(INPUT_FOLDER, filename), 'r', encoding='utf-8') as f: content = f.read() # 拆分换行 lines = split_by_length(content, WRAP_LENGTH) # 处理字间距 spaced_lines = [' '*LETTER_SPACING_LEVEL.join(list(line)) for line in lines] # 处理行高 final_content = ('\n'*(LINE_SPACING_LEVEL+1)).join(spaced_lines) # 保存 with open(os.path.join(OUTPUT_FOLDER, filename), 'w', encoding='utf-8') as f: f.write(final_content)
补充说明
你提供的text.txt示例内容为排版领域常用的无意义占位文本,如有翻译需求可直接使用通用翻译工具处理即可。
内容的提问来源于stack exchange,提问作者montyBoi
相关产品推荐
相关产品推荐

