Python中按条件移除文件内换行符的实现方法
合并非日期开头的行到上一行(匹配特定日期格式)
这是个很常见的文本整理需求,我给你准备了两种实用的解决方案,分别适合不同场景:
Python脚本方案(适合跨平台、需要自定义逻辑的场景)
这个脚本会严格匹配你指定的DD/MM/YYYY, HH:MM - 格式开头的行,把所有非该格式的行合并到上一行,全程保留UTF-8编码避免乱码:
import re # 定义匹配目标日期开头的正则表达式(完全匹配你的格式) date_pattern = re.compile(r'^\d{2}/\d{2}/\d{4}, \d{2}:\d{2} - ') # 替换成你的输入、输出文件路径 input_file = "your_input.txt" output_file = "your_output.txt" current_entry = "" with open(input_file, 'r', encoding='utf-8') as infile, open(output_file, 'w', encoding='utf-8') as outfile: for raw_line in infile: # 只去掉行尾的换行符,保留行内所有空格和格式 line = raw_line.rstrip('\n') if date_pattern.match(line): # 遇到新的日期行:先把之前累积的内容写入文件 if current_entry: outfile.write(current_entry + '\n') # 更新当前内容为新的日期行 current_entry = line else: # 非日期行:追加到当前内容后面(加空格避免内容连在一起) if current_entry: current_entry += ' ' + line else: # 处理特殊情况:如果文件第一行就没有日期开头,直接保留 current_entry = line # 写入最后一条累积的内容 if current_entry: outfile.write(current_entry + '\n')
脚本说明:
- 正则表达式精准匹配你给出的日期时间格式,不会误判其他类似行
- 全程使用UTF-8编码读取/写入,确保中文或特殊字符不会乱码
- 非日期行合并时自动加空格分隔,避免内容粘连
- 兼容第一行无日期开头的特殊情况
命令行awk方案(适合Linux/macOS快速批量处理)
如果你习惯用命令行工具,awk可以快速完成这个任务,无需写完整脚本:
awk ' BEGIN { # 定义日期匹配规则 date_regex = /^[0-9]{2}\/[0-9]{2}\/[0-9]{4}, [0-9]{2}:[0-9]{2} - / prev_content = "" } { if ($0 ~ date_regex) { if (prev_content != "") print prev_content prev_content = $0 } else { prev_content = prev_content " " $0 } } END { if (prev_content != "") print prev_content }' your_input.txt > your_output.txt
使用示例:
假设你的输入文件内容是:
10/02/2016, 19:08 - 这是第一条消息的开头
这条是第一条的续行,没有日期
11/02/2016, 20:15 - 这是第二条消息
续行1
续行2
处理后输出文件的每行都会以指定日期开头:
10/02/2016, 19:08 - 这是第一条消息的开头 这条是第一条的续行,没有日期
11/02/2016, 20:15 - 这是第二条消息 续行1 续行2
内容的提问来源于stack exchange,提问作者Yaeli778
相关产品推荐
相关产品推荐

