Python遍历文件夹文件读取xyz坐标的最佳实现方法
问题修正与实现方案
你现有代码有3个会直接导致运行失败的问题:
os.chdir()的作用是修改当前Python进程的工作目录,没有返回值,赋值给DIRECTORY后得到的是None,后续os.listdir(DIRECTORY)会直接报错- 直接调用
open()打开文件后没有手动关闭,处理上千个文件很容易触发系统文件句柄占用限制 - 没有做路径合法性校验,遍历到子文件夹、无权限访问的条目时会直接中断整个循环
推荐实现(新手友好版)
用Python3.4+自带的pathlib模块处理路径,不用手动拼接路径,配合with上下文管理器自动关闭文件,容错率更高:
from pathlib import Path # 直接指定目标文件夹的绝对路径,不需要修改全局工作目录 TARGET_FOLDER = Path(r"C:\Py Practice\Files") # 存储所有文件的坐标结果,key为文件名,value为对应文件的xyz坐标列表 all_file_coords = {} for file_item in TARGET_FOLDER.iterdir(): # 跳过子文件夹、快捷方式等非普通文件,如果只需要特定后缀的文件可以加判断: # if file_item.suffix != ".txt": continue if not file_item.is_file(): continue current_coords = [] # with语句会在代码块执行结束后自动关闭文件,哪怕中途报错也不会留文件占用 with open(file_item, "r", encoding="utf-8") as f: # 逐行读取文件内容,自动跳过空行 for line in f: stripped_line = line.strip() if not stripped_line: continue # 按你的文件实际分隔符调整split的参数: # 逗号分隔就用 split(","),制表符分隔就用 split("\t") x, y, z = map(float, stripped_line.split()) current_coords.append( (x, y, z) ) all_file_coords[file_item.name] = current_coords # 打印进度,处理1000个文件时可以直观看到运行状态 print(f"处理完成:{file_item.name},共读取{len(current_coords)}组坐标")
适配不同场景的调整技巧
- 如果你的文件带表头(第一行是
x y z这类列名),在逐行读的逻辑前加一句next(f)就能跳过第一行 - 如果是标准csv格式文件,用内置
csv模块解析比手动split容错率更高:import csv with open(file_item, "r", encoding="utf-8") as f: csv_reader = csv.reader(f) next(csv_reader) # 跳过表头 for row in csv_reader: x, y, z = map(float, row) current_coords.append( (x, y, z) ) - 怕单个文件损坏导致整个循环中断的话,给单文件处理逻辑加异常捕获,出错时打印日志后跳过即可:
for file_item in TARGET_FOLDER.iterdir(): if not file_item.is_file(): continue try: # 放上面的读文件、解析坐标逻辑 except Exception as e: print(f"读取{file_item.name}失败:{str(e)}") continue
内容的提问来源于stack exchange,提问作者landon.1111
相关产品推荐
相关产品推荐

