如何用Pythonic方式批量处理文本文件:按id排序并排除无id行
Pythonic 实现方案
可以利用Python内置的csv模块结合列表推导、sorted()函数来实现,代码简洁且符合Python风格:
import csv from pathlib import Path # 定义处理单个文件的函数 def process_file(file_path): # 读取文件内容 with open(file_path, 'r', encoding='utf-8') as f: reader = csv.reader(f, delimiter='|') rows = list(reader) if not rows: return # 空文件直接返回 # 分离表头和数据行 header = rows[0] data_rows = rows[1:] # 过滤掉id为空的行,并将id转为整数用于排序 valid_rows = [] for row in data_rows: if row[0].strip(): # 检查id列是否非空 try: # 保存时保留原id字符串,仅用整数排序 valid_rows.append((int(row[0]), row)) except ValueError: # 如果id不是整数,这里选择跳过,可按需调整逻辑 continue # 按id排序,提取原行数据 sorted_rows = [row for _, row in sorted(valid_rows, key=lambda x: x[0])] # 写入处理后的内容(这里生成带_processed后缀的新文件,避免覆盖原文件) with open(file_path.with_name(f"{file_path.stem}_processed{file_path.suffix}"), 'w', encoding='utf-8', newline='') as f: writer = csv.writer(f, delimiter='|') writer.writerow(header) writer.writerows(sorted_rows) # 遍历指定目录下的所有txt文件(修改路径为你的文件所在目录) for txt_file in Path('./your_files_dir').glob('*.txt'): process_file(txt_file)
关键特性说明:
- 用
pathlib.Path处理文件路径,比传统os.path更简洁直观 - 借助
csv模块处理分隔符文本,避免手动split可能出现的边界问题 - 结合
try-except处理id非整数的异常情况,增强代码鲁棒性 - 利用
sorted()的key参数实现按id排序,逻辑清晰易读 - 采用上下文管理器
with自动管理文件资源,无需手动关闭文件
如果确认所有有效id都是整数,可简化过滤逻辑:
valid_rows = [(int(row[0]), row) for row in data_rows if row[0].strip()]
内容的提问来源于stack exchange,提问作者Hiwot
相关产品推荐
相关产品推荐

