Python中百万行单列数据拆分至对应目录的路径寻址问题
Got it, let's break this down step by step—since you already know how to split files and create directories, the key here is just tying those two together with proper path handling in your loop.
解决思路:循环中绑定目录与文件路径
核心逻辑很简单:在每次循环迭代时,先创建对应的目标目录,再拼接该目录下的文件路径,最后把拆分好的数据写入这个路径即可。下面是具体的可落地实现:
1. 先定义基础参数
首先明确原文件路径、拆分数量、每个文件的行数,还有目录/文件的命名规则(统一位数的命名方便后续排序):
import os # 配置参数 input_file = "large_single_column.txt" total_split = 100 total_lines = 10**6 # 已知原文件总行数 lines_per_file = total_lines // total_split # 每个拆分文件的行数:10000行
2. 循环处理每个拆分块
在循环里依次完成创建目录→拼接文件路径→写入数据三个动作,用os.path.join处理路径是跨系统兼容的最优解:
with open(input_file, 'r', encoding='utf-8') as f_in: for split_idx in range(total_split): # 1. 生成统一格式的目录名(比如 dir_000 到 dir_099) target_dir = f"split_dir_{split_idx:03d}" # 2. 创建目录,exist_ok=True 避免重复创建时报错 os.makedirs(target_dir, exist_ok=True) # 3. 拼接目标文件的完整路径(目录+文件名) target_file = os.path.join(target_dir, f"data_{split_idx:03d}.txt") # 4. 写入当前拆分块的数据 with open(target_file, 'w', encoding='utf-8') as f_out: # 读取对应行数的内容并写入 for _ in range(lines_per_file): line = f_in.readline() if not line: # 处理原文件行数不足的边界情况 break f_out.write(line) print(f"完成拆分:{target_file}")
关键细节说明
- 用
os.path.join拼接路径:不管你用Windows还是Linux/macOS,它会自动适配系统的路径分隔符(\或/),完全避免手动拼接字符串的出错概率。 - 统一位数的命名格式:
f"{split_idx:03d}"生成000、001这类三位数字的命名,能保证目录和文件排序时不会出现dir_1排在dir_10后面的混乱情况。 exist_ok=True参数:如果需要重新运行脚本,不会因为目录已存在而抛出异常,非常适合调试或重复执行场景。
如果原文件的实际行数不是刚好10^6,代码里的if not line: break会自动把剩余所有行写入最后一个拆分文件,无需额外处理。
内容的提问来源于stack exchange,提问作者Bahar
相关产品推荐
相关产品推荐

