Python 2.7读取文件创建嵌套列表失败,寻求解决方案
解决从文件读取数据创建嵌套导航列表的问题
嘿,我来帮你搞定这个问题!你已经有了可以正常运行的硬编码嵌套列表,现在要把这个逻辑改成从数据文件读取生成,对吧?下面一步步给你讲清楚怎么做:
1. 先明确数据文件的格式
首先得确定你的数据文件是什么样的,假设你用的是一个文本文件(比如叫nav_data.txt),里面每行存一个房间的信息,用逗号分隔名称和坐标,就像这样:
studio,145.0,155.0 kitchen,245.0,400.0
如果你的文件是用空格或者其他符号分隔的,后面调整分割的方式就行。
2. 读取文件生成嵌套列表的完整代码
直接给你能用的Python代码,运行后就能得到和你硬编码一模一样的nav_Array:
nav_Array = [] # 用with语句打开文件,会自动帮你关闭,不用手动管 with open('nav_data.txt', 'r', encoding='utf-8') as file: # 逐行读取文件里的内容 for line in file: # 先把每行末尾的换行符去掉,再按逗号切成一个个字段 parts = line.strip().split(',') # 把坐标字符串转成浮点数(和你硬编码的类型一致),然后拼成子列表加进去 nav_Array.append([parts[0], float(parts[1]), float(parts[2])]) # 测试输出,和你原来的硬编码效果完全一样 print(nav_Array[0]) print(nav_Array[1]) print("\n") print(nav_Array[0][0]) print(nav_Array[0][1])
3. 给你拆解一下代码逻辑
with open(...):这是Python里处理文件的最佳实践,不用手动写file.close(),避免忘记关闭文件导致资源浪费line.strip():去掉每行开头结尾的空格和换行符,避免分割出空字符串split(','):把一行内容按逗号拆成列表,比如"studio,145.0,155.0"会变成["studio", "145.0", "155.0"]float(parts[1]):把坐标的字符串转成浮点数,保证和你硬编码的数值类型一致,这样后续机器人导航计算不会出问题
4. 额外加个容错处理(可选)
如果担心数据文件里有格式错误(比如空行、少字段、坐标不是数字),可以加个简单的异常处理,让程序不会直接崩溃,还能提示哪里错了:
nav_Array = [] with open('nav_data.txt', 'r', encoding='utf-8') as file: # 用enumerate可以拿到行号,方便定位错误 for line_num, line in enumerate(file, 1): cleaned_line = line.strip() # 跳过空行 if not cleaned_line: continue parts = cleaned_line.split(',') # 检查是不是正好3个字段 if len(parts) != 3: print(f"⚠️ 第{line_num}行格式不对,跳过啦") continue try: # 尝试转成浮点数,失败就捕获异常 nav_Array.append([parts[0], float(parts[1]), float(parts[2])]) except ValueError: print(f"⚠️ 第{line_num}行的坐标不是有效数字,跳过啦") # 最后输出生成的列表 print(nav_Array)
这样不管文件里有啥小问题,程序都能平稳运行,还能告诉你哪里出问题了,调试起来更方便~
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

