Python代码含义:str.split(line [: - 1],',')

时间:2017-10-27 10:35:27

标签: python python-2.7 python-3.x

我有这段代码:

f = open('scores.txt','r')
L = []
for line in f:
    L = L + map(float,str.split(line[:-1],','))
print(L)

您能解释一下以下命令及其参数的含义,因为我对Python完全不熟悉:     str.split(线[: - 1], '')

2 个答案:

答案 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)代码惯用法:

  1. 通过读取每个line并手动剥离换行符来遍历文件:
    • 错误:line[:-1]是剥离尾随换行符的一种不好方法:它在具有\ r \ n
    • 的Windows上中断
    • 更好:在Python 3中,open()默认为newline=None,它支持通用换行符,并正确处理\ r,\ n或\ r \ n。或者,您可以显式设置open(..., newline=??)。然后,只需按原样使用line,就无需使用笨拙的line[:-1]
  2. str.split(line[:-1], ',')将一行逗号分隔的float字符串拆分为float字符串列表。除非它等效于line[:-1].split(',')。但是现在,由于有了换行符的支持,我们可以进行line.split(',')了,堆更清晰了。

  3. 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(',') ]