Python 将字符串列表拆分为浮动-内存错误

Python 将字符串列表拆分为浮动-内存错误,python,string,split,out-of-memory,Python,String,Split,Out Of Memory,我无法处理将字符串列表拆分为浮点列表的问题。我打开一个文本文件(.vol,但它只包含文本),最后一行是一个非常长的数字行 参数1 437288.59375000 102574.20312500-83.30001831 参数2 437871.93750000 104981.40625000 362.10000610 参数30.00000000 参数342 1416 262 参数583.34375000 2407.19995117 445.40002441 参数6 20.00000000 参数7 1

我无法处理将字符串列表拆分为浮点列表的问题。我打开一个文本文件(.vol,但它只包含文本),最后一行是一个非常长的数字行

参数1 437288.59375000 102574.20312500-83.30001831
参数2 437871.93750000 104981.40625000 362.10000610
参数30.00000000
参数342 1416 262
参数583.34375000 2407.19995117 445.40002441
参数6 20.00000000
参数7 1.7000005
参数8 126879264
值:
0.25564435 0.462439 0.1365 0.1367 26.00000000(等,有数百万个值)

由于这是txt文件的第10行,我通过以下方式将它们加载到列表中:

with open('d:/py/LAS21_test.vol') as f:
txt = []
for line in f:
    txt.append(line)
然后我尝试通过以下方式将其从字符串转换为浮点:

A = []
for vx in txt[9]:
   try:
       A.append(float(vx))
   except ValueError:
       pass
print (A[0:20])
print (txt[9][0:20])
这给了我这样的结果:

[0.0, 2.0, 5.0, 5.0, 6.0, 4.0, 4.0, 3.0, 5.0, 0.0, 4.0, 6.0, 2.0, 4.0, 3.0, 9.0, 0.0, 1.0, 3.0, 6.0]
0.25564435 0.462439 
我想要的是一个正确分割的浮动列表,如:

[0.25564435, 0.462439]
我使用了
except-ValueError
来省略空格-当只使用
float(txt[9])
时,我得到了值错误。 第二个问题:我不能使用
txt[9]。拆分
,因为这样我会得到“内存错误”

如何将其正确转换为浮动列表?

您的问题(如评论中所述)是:

1) 在第一种情况下,您试图在拆分字符串之前将其索引到字符串中,并尝试将空格转换为浮点数(因此出现
ValueError

2) 在第二种情况下,列表中可能有太多的数字,您的内存中充满了大量的大字符串(因此出现了
MemoryError

先试试这个:

numbers = [float(s) for s in txt[9].split(' ')]
这会给你一个数字列表。如果这也导致出现
内存错误
,则必须手动迭代字符串:

numbers = []
numstring = []
for s in txt[9]
    # Reached a space
    if s == ' ':
        numbers.append(float(numstring))
        numstring = []
    else:
        numstring.append(s)
这会慢得多,但会节省内存。

您这里的问题(如评论中所述)是:

1) 在第一种情况下,您试图在拆分字符串之前将其索引到字符串中,并尝试将空格转换为浮点数(因此出现
ValueError

2) 在第二种情况下,列表中可能有太多的数字,您的内存中充满了大量的大字符串(因此出现了
MemoryError

先试试这个:

numbers = [float(s) for s in txt[9].split(' ')]
这会给你一个数字列表。如果这也导致出现
内存错误
,则必须手动迭代字符串:

numbers = []
numstring = []
for s in txt[9]
    # Reached a space
    if s == ' ':
        numbers.append(float(numstring))
        numstring = []
    else:
        numstring.append(s)

这会慢得多,但会节省内存。

如果我理解正确,您无法生成txt[9]。split()并按如下方式映射:
map(float,txt[9]。split())
,因为txt[9]太大

您可以尝试此生成器:

def float_generator(txt):
        x = ''
        for c in txt:
            if c != ' ':
                x += c
            else:
                out = float(x)
                x = ''
                yield(out)

for i in float_generator(txt[9]):
        print (i)

如果我理解正确,则无法生成txt[9].split()并将其映射为这样:
map(float,txt[9].split())
,因为txt[9]太大了

您可以尝试此生成器:

def float_generator(txt):
        x = ''
        for c in txt:
            if c != ' ':
                x += c
            else:
                out = float(x)
                x = ''
                yield(out)

for i in float_generator(txt[9]):
        print (i)

您应该添加输入文件内容以便于理解。刚刚添加,谢谢。您应该添加输入文件内容以便于理解。刚刚添加,谢谢。