如何像python那样从txt中读取列表?

2024-04-23 22:20:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python概念加载txt文件的内容,以便用它来训练svm中的模型。 我想加载txt文件中的数据:

[ 0.02713807  0.01802697  0.01690036  0.01501216  0.01466412  0.01638859       0.0210163   0.02658022  0.03664452  0.05064286  0.06027664  0.06431134       0.04303673  0.03247764  0.02293602  0.01847688  0.0174582   0.01860664       0.02576164  0.02296149  0.0582211   0.37246149]
[ 0.03623561  0.05211099  0.02469929  0.0134991   0.01029103  0.00880611       0.00898548  0.00870684  0.0117465   0.01962223  0.03895351  0.01956952      0.00972828  0.00704872  0.00656471  0.00689743  0.00854528  0.01128713      0.02119957  0.05047751  0.05028719  0.57473797]

我使用的代码如下:

data = []
with open('data2.txt') as f:
  for y in f:
    data.append(float(y.strip()))
    print (data)

当我运行脚本时,出现以下错误:

ValueError: could not convert string to float: '[ 0.02713807 0.01802697 0.01690036 0.01501216 0.01466412 0.01638859'

我该怎么解决这个问题,有什么建议吗?你知道吗


Tags: 文件数据代码模型txt概念内容data
3条回答

这个怎么样:

data = []
with open('data2.txt') as f:
  for l in f:
    data.append(list(map(float,l[1:-2].split())))
print(data)

输出:

[[0.02713807, 0.01802697, 0.01690036, 0.01501216, 0.01466412, 0.01638859, 0.0210163, 0.02658022, 0.03664452, 0.05064286, 0.06027664, 0.06431134, 0.04303673, 0.03247764, 0.02293602, 0.01847688, 0.0174582, 0.01860664, 0.02576164, 0.02296149, 0.0582211, 0.37246149], [0.03623561, 0.05211099, 0.02469929, 0.0134991, 0.01029103, 0.00880611, 0.00898548, 0.00870684, 0.0117465, 0.01962223, 0.03895351, 0.01956952, 0.00972828, 0.00704872, 0.00656471, 0.00689743, 0.00854528, 0.01128713, 0.02119957, 0.05047751, 0.05028719, 0.5747379]]

如果要查看NumPy数组列表,请执行以下操作:

import numpy as np
data = []
with open('data2.txt') as f:
  for l in f:
    data.append(np.array(list(map(float,l[1:-2].split()))))
print(data)

输出:

[array([ 0.02713807,  0.01802697,  0.01690036,  0.01501216,  0.01466412,
        0.01638859,  0.0210163 ,  0.02658022,  0.03664452,  0.05064286,
        0.06027664,  0.06431134,  0.04303673,  0.03247764,  0.02293602,
        0.01847688,  0.0174582 ,  0.01860664,  0.02576164,  0.02296149,
        0.0582211 ,  0.37246149]), array([ 0.03623561,  0.05211099,  0.02469929,  0.0134991 ,  0.01029103,
        0.00880611,  0.00898548,  0.00870684,  0.0117465 ,  0.01962223,
        0.03895351,  0.01956952,  0.00972828,  0.00704872,  0.00656471,
        0.00689743,  0.00854528,  0.01128713,  0.02119957,  0.05047751,
        0.05028719,  0.5747379 ])]

使用正则表达式从以下行检索数字:

data = []

with open('file.txt') as f:
    for line in f:
        numbers = re.search(r'\[\s*(.*\d)\s*\]', line).group(1)
        data.append(list(map(float, numbers.split())))

print(data)

输出

[[0.02713807, 0.01802697, 0.01690036, 0.01501216, 0.01466412, 0.01638859, 0.0210163, 0.02658022, 0.03664452, 0.05064286, 0.06027664, 0.06431134, 0.04303673, 0.03247764, 0.02293602, 0.01847688, 0.0174582, 0.01860664, 0.02576164, 0.02296149, 0.0582211, 0.37246149], [0.03623561, 0.05211099, 0.02469929, 0.0134991, 0.01029103, 0.00880611, 0.00898548, 0.00870684, 0.0117465, 0.01962223, 0.03895351, 0.01956952, 0.00972828, 0.00704872, 0.00656471, 0.00689743, 0.00854528, 0.01128713, 0.02119957, 0.05047751, 0.05028719, 0.57473797]]

如果您使用^{}生成这个文件,那么加载它的明显方式就是^{}。你知道吗

更一般地说,你不应该只把东西保存到一个文件中“不管什么格式,我都不在乎”,然后拼命想办法解析这个格式。以您知道如何加载的格式保存内容。使用np.savetxt可以将其加载为np.loadtxtnp.savenp.loadjson.dumpjson.loadpickle.dumppickle.loadcsv.writercsv.reader……它们成对出现是有原因的。(像只是在文件中附加str(row)这样的格式呢?没有函数读取它。所以答案是:不要这样做。)

然后,整个问题“我如何解析一个看起来像浮点列表的repr,但是删除了逗号的东西”从一开始就没有出现过。你知道吗

我不确定如何从savetxt中得到这样的输出。默认情况下,如果将二维数组写入文件,则得到的列由单个空格分隔,而不是在块之间有额外空格的列块,并且不会在每行周围获得方括号。有无数的参数以不同的方式控制格式,但我不知道什么样的参数组合会给你这种格式。你知道吗

但想必,你知道你叫什么。因此可以将等价的参数传递给loadtxt。你知道吗

或者,在理想情况下,让事情变得更简单:将代码更改为只使用默认参数调用savetxt。你知道吗

相关问题 更多 >