如何使用numpy.genfromtxt读取argparse传入路径下的CSV文件为二维numpy数组
跨目录读取CSV为numpy数组的实现方法
你当前使用的np.genfromtxt本身原生支持绝对路径、相对路径读取,跨目录读取失败大多是路径解析逻辑不符合预期导致的,按以下步骤调整即可:
1 首先确认argparse参数配置正确
参数类型设置为str即可正常接收所有合法路径字符串,配置示例:
import argparse import numpy as np import os parser = argparse.ArgumentParser() parser.add_argument('-X', type=str, required=True, help='CSV文件路径') args = parser.parse_args()
2 按使用场景选择路径处理方式
场景1:接收用户传入的任意路径(支持绝对路径、相对于终端工作目录的相对路径)
不需要额外处理,直接传入即可,命令行传路径时如果路径包含空格、中文等特殊字符,给路径外层加双引号包裹即可:
Data = np.genfromtxt(args.X, delimiter=",")
注意:此场景下相对路径是相对于你执行python命令的终端所在目录,不是脚本文件本身的存储目录
场景2:要求相对路径相对于脚本文件的存储目录(和同目录读取时的逻辑一致)
需要先拼接脚本所在目录的绝对路径,自动适配不同操作系统的路径分隔符:
# 获取当前脚本所在的绝对目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接得到CSV文件的完整绝对路径 csv_full_path = os.path.join(script_dir, args.X) # 读取前可增加校验提前定位问题 if not os.path.exists(csv_full_path): raise FileNotFoundError(f"CSV文件不存在:{csv_full_path}") Data = np.genfromtxt(csv_full_path, delimiter=",")
补充说明
- Windows系统下的路径可以用
\或者/作为分隔符,os.path.join会自动适配系统格式,不需要手动替换 - 绝对路径直接传入即可正常读取,不需要做任何拼接处理
内容的提问来源于stack exchange,提问作者Amit Kumar
相关产品推荐
相关产品推荐

