如何从TXT文件读取元组?使用Numpy genfromtxt遇问题求助
我来帮你解决这个问题~你遇到的情况是因为genfromtxt默认会把读取到的字符串当成字节类型,而且没法直接识别带括号的元组格式,下面给你几个实用的解决方案:
方案1:用原生Python直接处理(最直观)
这种方式不需要依赖Numpy,针对你当前的TXT格式处理起来非常灵活:
# 打开文件读取内容 with open('file.txt', 'r') as f: content = f.read().strip() # 按空格分割成单个的元组字符串(比如"(0,0)") tuple_strings = content.split() # 逐个处理每个字符串,转换成元组 tuple_list = [] for s in tuple_strings: # 去掉首尾的括号,按逗号分割成数字字符串 num_strs = s.strip('()').split(',') # 把字符串转成整数,再组成元组 current_tuple = tuple(int(num) for num in num_strs) tuple_list.append(current_tuple) print(tuple_list)
运行这段代码后,你就能得到完全符合需求的元组列表:[(0, 0), (0, 0), (1, 0), ..., (5, 5)]
方案2:如果一定要用Numpy的处理方式
如果你坚持要用genfromtxt,需要自定义转换器来处理带括号的字节字符串,把它转成元组:
import numpy as np # 定义一个转换器函数,处理每个读取到的字节类型字符串 def parse_tuple(byte_str): # 先把字节转成普通字符串 str_val = byte_str.decode('utf-8') # 去掉括号并分割数字 num_strs = str_val.strip('()').split(',') # 转成整数元组 return tuple(int(num) for num in num_strs) # 使用genfromtxt,指定dtype为object,并用转换器处理每个元素 data = np.genfromtxt('file.txt', delimiter=' ', dtype=object, converters={i: parse_tuple for i in range(16)}) # 转成普通Python列表 tuple_list = list(data) print(tuple_list)
这里的converters={i: parse_tuple for i in range(16)}是因为你的TXT里有16个元组,每个位置都用转换器处理;如果元组数量不确定,也可以先读取所有内容再批量处理。
方案3:修改TXT格式适配Numpy(适合大数据量)
如果你的数据量很大,想利用Numpy的高效性,可以修改TXT的存储格式,比如把每个元组的两个数字用空格分隔,每行一个元组:
0 0 0 0 1 0 2 3 1 0 1 1 1 1 3 3 2 0 1 2 2 1 4 4 3 0 2 2 3 1 5 5
然后用下面的代码读取,效率很高:
import numpy as np # 读取成二维整数数组 data_array = np.genfromtxt('file.txt', delimiter=' ', dtype=int) # 转成元组列表 tuple_list = [tuple(row) for row in data_array] print(tuple_list)
也可以把所有数字放在一行用空格分隔,然后用reshape(-1,2)转成二维数组再处理,效果是一样的。
内容的提问来源于stack exchange,提问作者Lorenzo Gutiérrez
相关产品推荐
相关产品推荐

