求高效处理被'new'分隔的CSV嵌套数据的Python代码——保留各数据块首尾行
处理被"new"分隔的嵌套数据(保留每个块的首尾元素)
我完全懂你这个痛点——处理超大体积的分隔数据时,拆分成多个文件再处理简直是效率灾难。直接在内存里对数据块做处理才是最优解,下面给你一段Python代码,完美匹配你的需求:
核心实现代码(字符串处理)
def process_data(input_str): # 按"new"分割数据,拆分出各个块 split_parts = input_str.split("new") # 初始化结果列表,第一个块是开头的"data"部分 result = [split_parts[0].strip()] for part in split_parts[1:]: # 拆分当前块内的元素,过滤掉空字符串(避免前后空格干扰) elements = [elem for elem in part.strip().split() if elem] # 根据元素数量处理:保留首尾,单个元素则直接保留 if len(elements) >= 2: processed_chunk = f"{elements[0]} {elements[-1]}" elif len(elements) == 1: processed_chunk = elements[0] else: processed_chunk = "" result.append(processed_chunk) # 用"new"拼接所有处理后的部分,还原成目标格式 return " new ".join(result) # 测试你的示例数据 original_data = "data new 5,9,7 3,8,1 2,9,6 new 5,9,3 8,4,9 new 8,3,9 5,4,7 1,6,7 1,2,8" processed_result = process_data(original_data) print(processed_result)
运行这段代码后,输出结果和你期望的完全一致:
data new 5,9,7 2,9,6 new 5,9,3 8,4,9 new 8,3,9 1,2,8
针对超大文件的流式处理版本
如果你的数据是存储在大文件里(比如几GB级别的CSV/文本文件),上面的字符串处理方式可能会占用过多内存,这时可以用逐行流式处理,全程不需要加载整个文件到内存:
def process_large_file(input_path, output_path): with open(input_path, 'r', encoding='utf-8') as infile, \ open(output_path, 'w', encoding='utf-8') as outfile: for line in infile: line = line.strip() if not line: continue # 跳过空行 split_parts = line.split("new") result = [split_parts[0].strip()] for part in split_parts[1:]: elements = [elem for elem in part.strip().split() if elem] if len(elements) >= 2: processed_chunk = f"{elements[0]} {elements[-1]}" elif len(elements) == 1: processed_chunk = elements[0] else: processed_chunk = "" result.append(processed_chunk) # 写入处理后的行 outfile.write(" new ".join(result) + "\n") # 使用方式:替换成你的输入输出文件路径 # process_large_file("your_input_file.txt", "your_output_file.txt")
为什么这个方案高效?
- 不需要拆分文件,避免了大量的文件IO操作(这是之前方法慢的核心原因)
- 每个数据块只在内存里做简单的拆分和筛选,计算成本极低
- 流式处理版本甚至不会加载整个文件到内存,完全适配超大文件场景
内容的提问来源于stack exchange,提问作者roben_zik
相关产品推荐
相关产品推荐

