多行文本奇偶行合并

背景

最近遇到一次多行文本排版打印的问题,文档内排版也是有板块和层次的,因此没法直接简单的使用分栏后打印。需要手动排版,把别人提供的文本原奇偶行合并成一行两列。
数据举例:

原始文本

line1
line2
line3
line4
line5

期望表格

列1列2
line1line2
line3line4
line5

转换

步骤一

  • 使用Notepad++查找替换功能(支持正则表达式)
    查找正则为:
^(.+)(\R)(.+\R)?

替换正则为:

$1$2\t$3

完成替换后文本如下:

line1
	line2
line3
	line4
line5

步骤二

  • 再使用Editplus查找替换功能(支持正则表达式)

查找正则为:

\n\t

替换正则为:

\t

完成替换后文本如下:

line1	line2
line3	line4
line5

再粘贴进Excel就可以了。

历史和参考

links

import os from docx import Document import pandas as pd def extract_table_texts(docx_path, max_rows=30): """提取单个docx文件所有表格的前max_rows文本""" doc = Document(docx_path) file_texts = [] # 存储当前文件所有表格的前30文本 for table in doc.tables: table_texts = [] # 遍历表格的每一,最多取max_rows for row_idx, row in enumerate(table.rows): if row_idx >= max_rows: break # 超过30时停止 row_text = [] for cell in row.cells: text = cell.text.strip() if text: row_text.append(text) # 合并当前的单元格文本(用逗号分隔) table_texts.append(", ".join(row_text)) # 合并当前表格的文本(用分号分隔不同) file_texts.append("; ".join(table_texts)) # 合并所有表格的文本(用换符分隔不同表格) return "\n".join(file_texts) def process_folder(folder_path, output_file="output.xlsx"): """处理文件夹中所有docx文件,每个文件占Excel一""" data = [] # 遍历文件夹 for filename in os.listdir(folder_path): if filename.lower().endswith(".docx"): file_path = os.path.join(folder_path, filename) try: # 提取文本并添加到数据列表 combined_text = extract_table_texts(file_path) data.append({"文件名": filename, "表格内容(前30)": combined_text}) except Exception as e: print(f"处理文件 {filename} 时出错: {str(e)}") # 创建DataFrame df = pd.DataFrame(data) # 保存结果(无需去重) df.to_excel(output_file, index=False) return df # 使用示例 if __name__ == "__main__": input_folder = "/path/to/your/documents" # 替换为实际路径 output_file = "extracted_texts.xlsx" result_df = process_folder(input_folder, output_file) print(f"完成!共处理 {len(result_df)} 个文件,已保存至 {output_file}")请改进代码,仅提取docx表格前42,并且在xlsx中将基数作一列排列,偶数作一列排列
最新发布
03-14
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值