我正在尝试从文本文件中读取一些数字并将它们转换为浮点数列表,但我尝试的任何数据似乎都无法正常工作。
这是我现在的代码:
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]
因为它似乎是嵌套的还是什么?
答案 0 :(得分:5)
这种情况正在发生,因为.split()
总是返回一个项目列表,即使只有一个元素存在。如果您将python_lengths.append(line.split())
更改为python_lengths.extend(line.split())
,您将获得预期的平面列表。
答案 1 :(得分: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
答案 2 :(得分: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
开头,那么您将在那里获得换行符。解决方案是将反斜杠加倍,使用原始字符串,或者只使用正斜杠。