如何在Linux环境下按第二列首字母的字母顺序拆分大型CSV文件
按CSV第二列首字母拆分文件的实现方案
方案1:awk单行命令(适合Unix/Linux/macOS环境,大文件性能最优)
直接在终端执行以下命令即可,无需额外安装依赖,逐行处理不会占满内存:
awk -F ',' '{ # 取第二列第一个字符转为小写 first_letter = tolower(substr($2, 1, 1)) # 将当前行追加到对应字母命名的csv文件 print $0 >> first_letter".csv" # 关闭文件避免句柄超限,适配首字母数量极多的场景 close(first_letter".csv") }' 你的原文件路径.csv
执行完成后会在当前目录下生成对应首字母命名的csv文件,内容符合需求。
方案2:Python实现(跨平台,支持自定义扩展)
如果是Windows环境或者需要额外加校验、表头处理等逻辑,可以用以下Python脚本,同样逐行读取适配大文件:
import csv from collections import defaultdict if __name__ == "__main__": # 按首字母缓存文件写入对象,避免重复打开文件 writers = defaultdict(lambda: [None, None]) source_path = "你的原文件路径.csv" try: with open(source_path, "r", encoding="utf-8") as source_f: reader = csv.reader(source_f) for row in reader: # 跳过空行、列数不足的异常行 if not row or len(row) < 2 or not row[1].strip(): continue first_letter = row[1].strip()[0].lower() # 首次遇到该首字母时创建对应文件和写入器 if writers[first_letter][0] is None: f = open(f"{first_letter}.csv", "w", encoding="utf-8", newline="") writers[first_letter] = [f, csv.writer(f)] # 写入当前行 writers[first_letter][1].writerow(row) finally: # 统一关闭所有打开的文件 for file_obj, _ in writers.values(): if file_obj: file_obj.close()
内容的提问来源于stack exchange,提问作者Amine Dakhli
相关产品推荐
相关产品推荐

