Python读取文本文件后列表格式与原数组不符,求助解决
我明白你的问题了——你把Python数组的内容复制到文本文件后,读取出来的结果只是按行拆分的字符串列表,没法和原数组的结构(比如嵌套列表、数值类型)完全匹配对吧?别担心,我给你几个针对性的解决方案,看哪种符合你的情况:
情况1:原数组是二维列表,文本每行对应一个子列表
比如你的原数组是这样的嵌套结构:
original_array = [ [1, 2, 3, 4, 5, 6, 7, 8], [9, 10, 11, 12, 13, 14, 15, 16] ]
文本文件里每行是8个用空格(或逗号)分隔的数值。那你需要把每行的字符串分割后转成数值,再组装成嵌套列表:
train = [] with open('你的文件名.txt', 'r', encoding='utf-8') as f: for line in f: # 去掉换行符,按空格分割(如果是逗号就改成split(',')),转成整数(浮点数用float) row_elements = list(map(int, line.strip().split())) train.append(row_elements)
运行后train就和原二维数组的结构、类型完全一致了。
情况2:原数组是一维列表,文本只是把元素分成了多行
如果原数组是一个长长的一维列表,你只是为了方便阅读把元素分成了多行,那需要把所有行的元素合并成一个一维列表:
train = [] with open('你的文件名.txt', 'r', encoding='utf-8') as f: for line in f: row_elements = list(map(int, line.strip().split())) train.extend(row_elements) # 用extend把每行元素追加到列表末尾
这样得到的train就是和原一维数组一模一样的结构。
情况3:你直接把Python数组的代码复制到了文本里
如果你图省事,直接把原数组的Python代码(比如[[1,2,...], [3,4,...]])复制到了文本文件,那用ast.literal_eval解析是最稳妥的方法——它能直接把合法的Python字面量转换成对应的对象,完全还原原数组:
import ast with open('你的文件名.txt', 'r', encoding='utf-8') as f: file_content = f.read().strip() train = ast.literal_eval(file_content)
这种方法不管你的数组是一维、二维还是更复杂的嵌套结构,只要文本内容是合法的Python数组语法,就能完美还原,还能保留原有的数值类型(int/float都没问题)。
之前你读取后得到的只是行列表,本质是因为默认读取的是原始字符串,没有做类型转换和结构重组,按照上面的方法处理后就能解决问题啦。
内容的提问来源于stack exchange,提问作者ViVi
相关产品推荐
相关产品推荐

