0

我正在尝试从文本文件中读取一些数字并将它们转换为浮点数列表,但我尝试的任何方法似乎都无法正常工作。

这是我现在的代码:

python_data = open('C:\Documents and Settings\redacted\Desktop\python_lengths.txt','r')
python_lengths = []
for line in python_data:
    python_lengths.append(line.split())
python_lengths.sort()

print python_lengths

它返回:

[['12.2'], ['26'], ['34.2'], ['5.0'], ['62'], ['62'], ['62.6']]

(包括所有括号)

但我无法使用任何常规命令将其转换为浮点列表,例如:

python_lengths = float(python_lengths)

或者:

float_lengths = [map(float, x) for x in python_lengths]

因为它似乎是嵌套的还是什么?

4

3 回答 3

5

发生这种情况是因为.split()即使只有 1 个元素也总是返回一个项目列表。如果你改变你的python_lengths.append(line.split())python_lengths.extend(line.split())你会得到你期望的平面列表。

于 2012-05-24T07:16:47.773 回答
0

@eumiro 的回答是正确的,但这里还有一些可以提供帮助的东西:

numbers = []
with open('C:\Documents and Settings\redacted\Desktop\python_lengths.txt','r') as f:
   for line in f.readlines():
      numbers.extend(line.split())

numbers.sort()
print numbers
于 2012-05-24T07:19:01.650 回答
0
def floats_from_file(f):
    for line in f:
        for word in line.split():
            yield float(word)

with open('C:/Documents and Settings/redacted/Desktop/python_lengths.txt') as f:
    python_lengths = list(floats_from_file(f))

python_lengths.sort()

print python_lengths

请注意,即使在 Windows 上,您也可以使用正斜杠。如果你想使用反斜杠,你应该使用“原始”字符串,以避免出现问题。什么样的问题?好吧,有些字符是特殊的反斜杠;例如,\n表示换行符。如果您只是将路径放在普通引号中,并且其中一个目录名称以 开头n,您将在那里获得一个换行符。解决方案是将反斜杠加倍、使用原始字符串或仅使用正斜杠。

于 2012-05-24T07:37:08.160 回答