with open(filename, "r") as f:
for line in f:
line = (' '.join(line.strip().split())).split()
有人可以分解删除空格的行吗?
我理解 line.strip()。split()首先从line
中删除前导和尾随空格,然后将结果字符串拆分为空格并将所有单词存储在列表中。
但剩下的代码有什么作用?
答案 0 :(得分:0)
行' '.join(line.strip().split())
创建一个string
,其中包含由一个空格字符分隔的所有列表元素。在此字符串上应用split()
方法会再次返回一个列表,其中包含字符串中由空格字符分隔的所有单词。
答案 1 :(得分:0)
以下是细分:
# Opens the file
with open(filename, "r") as f:
# Iterates through each line
for line in f:
# Rewriting this line, below:
# line = (' '.join(line.strip().split())).split()
# Assuming line was " foo bar quux "
stripped_line = line.strip() # "foo bar quux"
parts = stripped_line.split() # ["foo", "bar", "quux"]
joined = ' '.join(parts) # "foo bar quux"
parts_again = joined.split() # ["foo", "bar", "quux"]
这是你在找什么?
答案 2 :(得分:0)
这段代码是无意义的复杂就是它。
如果你没有strip
下一个({arg split
会因为副作用导致空白和尾随空格),则无需split
,所以line.strip().split()
可以简化为line.split()
。
join
并且重新 - split
没有改变一件事,join
将第一个split
与空格重新组合在一起,然后split
在那些相同的空间重新分配。因此,您可以将join
仅花费在split
上的时间,并保留第一个split
的原始结果,并将其更改为:
line = line.split()
它在功能上与原始版本相同:
line = (' '.join(line.strip().split())).split()
并且启动速度更快。我猜你所交的代码是由一个不理解split
和join
的人和just threw stuff at their problem without understanding what it did编写的。
答案 3 :(得分:0)
以下是对代码的解释: -
with open(filename, "r") as f:
for line in f:
line = (' '.join(line.strip().split())).split()
首先line.strip()
从行中删除前导和尾随空格,.split()
根据空格删除列表。
再次.join
将之前的列表转换为分隔的空白行。最后.split
再次将其转换为列表。
此代码是多余的line = (' '.join(line.strip().split())).split()
。它应该是: -
line = line.split()
如果您再次想strip
使用: -
line = map(str.strip, line.split())
答案 4 :(得分:-1)
我认为他们这样做是为了维持一定数量的空白。条带正在删除所有空格(可以是5个空格和一个制表符),然后它们将在单个空格中添加回来。