在读取文件时删除空格

时间:2017-02-17 04:04:59

标签: python removing-whitespace

with open(filename, "r") as f:
    for line in f:
        line = (' '.join(line.strip().split())).split()

有人可以分解删除空格的行吗? 我理解 line.strip()。split()首先从line中删除前导和尾随空格,然后将结果字符串拆分为空格并将所有单词存储在列表中。

但剩下的代码有什么作用?

5 个答案:

答案 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()

并且启动速度更快。我猜你所交的代码是由一个不理解splitjoin的人和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个空格和一个制表符),然后它们将在单个空格中添加回来。