我有这段代码:
f = open('scores.txt','r')
L = []
for line in f:
L = L + map(float,str.split(line[:-1],','))
print(L)
您能解释一下以下命令及其参数的含义,因为我对Python完全不熟悉: str.split(线[: - 1], '')
答案 0 :(得分:0)
您的文件scores.txt
包含大量数字。这些数字用逗号分隔。
您浏览文件(逐行)并将所有这些数字放在一个大的列表中。
每一行都以换行符号结尾。这就是你用line[:-1]
切掉最后一个符号的原因。
数字以逗号分隔,因此您可以使用此行并使用line[:-1].split(',')
在每个逗号处剪切/拆分。
从文件中读取时,您将所有内容都作为文本阅读。为了进一步计算,你告诉Python将它视为数字,更确切地说是浮点数/有理数。
顺便说一句,我认为map在Python 3中不会像这样工作。但是等效的代码是:
f = open('scores.txt','r')
L = []
for line in f:
L = L + [float(s) for s in line[:-1].split(',')]
print(L)
答案 1 :(得分:0)
对于读取文件的行是逗号分隔的浮点列表的文件,这是非常糟糕的(Python 2.x)代码惯用法:
line
并手动剥离换行符来遍历文件:
line[:-1]
是剥离尾随换行符的一种不好方法:它在具有\ r \ n open()
默认为newline=None
,它支持通用换行符,并正确处理\ r,\ n或\ r \ n。或者,您可以显式设置open(..., newline=??)
。然后,只需按原样使用line
,就无需使用笨拙的line[:-1]
str.split(line[:-1], ',')
将一行逗号分隔的float字符串拆分为float字符串列表。除非它等效于line[:-1].split(',')
。但是现在,由于有了换行符的支持,我们可以进行line.split(',')
了,堆更清晰了。
L = [] for line in f:
L = L + map(float, str.split(line[:-1],','))
是一种旧的2.x附加到列表列表的方法。同样,我们可以使用列表推导代替map(float, ...)
。并且我们可以使用嵌套的列表理解来消除for line in f:
循环。
所以:
f = open('scores.txt','r')
L = [ [ float(flt) for flt in line.split(',') ] for line in f ]
甚至更好的是,我们使用上下文处理程序来自动处理打开,关闭f和相关异常。因此,代码简化为:
with open('scores.txt','r') as f:
L = [ [ float(x) for line in f x in line.split(',') ]