You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将文件内的点列表转换为两个独立的x、y坐标数组?

问题背景
  • data.txt存储了集合格式的二维点数据,内容为:{(1.1,2.2),(3.3,4.4),(5.5,6.6),(7.7,8.8),(9.9,10),(11,12)}
  • 初始读取代码存在两个明显问题:
    • 连续两次调用f.read(),第一次读取完成后文件指针已经移到内容末尾,第二次读取拿到的是空值
    • 没有实现坐标解析、拆分x/y数组的逻辑
  • 预期输出效果:
>>> print(x)
[1.1 3.3 5.5 7.7 9.9 11]

>>> print(y)
[2.2 4.4 6.6 8.8 10 12]
实现代码

推荐用Python标准库ast的literal_eval做安全解析,避免直接用eval执行恶意代码的风险,同时用上下文管理器自动处理文件关闭,避免资源泄漏:

import ast

# 读取文件内容
with open("data.txt", "r", encoding="utf-8") as f:
    file_content = f.read().strip()

# 安全解析为Python集合对象
points = ast.literal_eval(file_content)

# 拆分x、y坐标
x = [p[0] for p in points]
y = [p[1] for p in points]

# 适配示例的无逗号空格分隔打印格式
def format_print(arr):
    print(f"[{' '.join(str(num) for num in arr)}]")

format_print(x)
format_print(y)

补充说明

  • 如果你需要严格保证坐标顺序和文件内书写顺序一致,不要用集合解析的方案(Python3.7以下版本集合不保证插入顺序),可以直接用字符串处理的方式解析:
with open("data.txt", "r", encoding="utf-8") as f:
    file_content = f.read().strip()

# 字符串切割提取坐标
raw_tuples = file_content.strip("{}").split("),(")
x = []
y = []
for item in raw_tuples:
    px, py = item.strip("()").split(",")
    # 自动识别整数、浮点数类型
    x.append(float(px) if "." in px else int(px))
    y.append(float(py) if "." in py else int(py))
  • 如果你本身就用NumPy做数值计算,直接把列表转成NumPy数组,原生打印效果就和示例完全一致:
import numpy as np
x = np.array(x)
y = np.array(y)
print(x) # 输出 [ 1.1  3.3  5.5  7.7  9.9 11. ]
print(y) # 输出 [ 2.2  4.4  6.6  8.8 10.  12. ]

内容的提问来源于stack exchange,提问作者challote

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:24:20