如何用Python合并文本文件每8行或保留每8个换行符?
Python 实现按8行合并文本内容的方案
针对你提出的把大型文本按每8行(包含空行)合并成单行的需求,我整理了两个实用的Python实现方案,你可以根据文件大小和场景灵活选择:
方案一:逐行分块合并(适合超大文件,低内存占用)
这个方法会逐行读取文件,每攒够8行就合并成一行存入变量,不会一次性加载整个文件到内存,非常适合处理几GB级别的大型文本。
def merge_eight_lines(input_file): merged_lines = [] current_block = [] with open(input_file, 'r', encoding='utf-8') as f: for line in f: # 移除每行末尾的换行符,避免合并后出现多余换行 current_block.append(line.rstrip('\n')) # 每攒够8行就合并成单行 if len(current_block) == 8: # 用空格连接8行内容,可替换为你需要的分隔符(如逗号、制表符) merged_line = ' '.join(current_block) merged_lines.append(merged_line) current_block = [] # 处理文件末尾不足8行的剩余内容 if current_block: merged_line = ' '.join(current_block) merged_lines.append(merged_line) # 返回所有合并后的单行列表,可直接使用或写入新文件 return merged_lines # 使用示例 result = merge_eight_lines('your_large_file.txt') # 将结果保存到新文件 with open('merged_result.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(result))
关键说明:
- 代码保留了原始文本中的空行(第8行的空白会被作为空字符串加入块中);
- 分隔符可自定义,比如把
' '.join改成','.join就能用逗号连接每行内容; - 全程逐行处理,内存占用极低,不会因为文件过大导致崩溃。
方案二:通过移除指定换行符实现(代码更简洁,适合中等大小文件)
这个思路是先读取整个文件内容,按换行符分割成列表后,每8个元素合并成一个字符串,本质就是移除除每8个换行外的所有换行符。
def merge_by_removing_newlines(input_file): with open(input_file, 'r', encoding='utf-8') as f: # 读取所有内容,自动处理不同系统的换行符,同时保留空行 all_lines = f.read().splitlines() merged_lines = [] # 每8行一组进行合并 for i in range(0, len(all_lines), 8): block = all_lines[i:i+8] merged_line = ' '.join(block) merged_lines.append(merged_line) return merged_lines # 使用示例 result = merge_by_removing_newlines('your_large_file.txt') with open('merged_result.txt', 'w', encoding='utf-8') as f: f.write('\n'.join(result))
关键说明:
splitlines()方法会自动识别\n、\r\n等不同换行格式,无需额外处理;- 代码逻辑更直观,但会将整个文件加载到内存,若文件是几十GB级别,可能出现内存不足的情况,更适合处理中等大小的文件。
内容的提问来源于stack exchange,提问作者zemone
相关产品推荐
相关产品推荐

