Python 读取文件时删除空白

Python 读取文件时删除空白,python,removing-whitespace,Python,Removing Whitespace,有人能把删除空白的那条线分解一下吗? 我理解line.strip().split()首先从line中删除前导空格和尾随空格,然后将生成的字符串拆分为空格,并将所有单词存储在列表中 但是剩下的代码做什么呢 行'.join(line.strip().split())创建一个字符串,该字符串由所有列表元素组成,这些元素仅由一个空格字符分隔。对该字符串应用split()方法将再次返回一个列表,其中包含字符串中由空白字符分隔的所有单词。下面是一个细分: with open(filename, "r") a

有人能把删除空白的那条线分解一下吗? 我理解line.strip().split()首先从
line
中删除前导空格和尾随空格,然后将生成的字符串拆分为空格,并将所有单词存储在列表中

但是剩下的代码做什么呢

'.join(line.strip().split())
创建一个
字符串
,该字符串由所有列表元素组成,这些元素仅由一个空格字符分隔。对该字符串应用
split()
方法将再次返回一个列表,其中包含字符串中由空白字符分隔的所有单词。

下面是一个细分:

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

这就是你要找的吗?

毫无意义的复杂代码就是这样

如果没有arg
split
则无需
strip
下一步(无arg
split
会因副作用而删除前导和尾随空格),因此
line.strip().split()
可以简化为
line.split()

join
和re-
split
不会改变任何事情,
join
将第一个
split
与空格粘在一起,然后
split
在相同的空格上重新排列。因此,您可以将加入
join
ing所花费的时间仅保存到
split
,只保留第一次
split
的原始结果,将其更改为:

# 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"]
它在功能上与原版完全相同:

line = line.split()

启动速度更快。我猜你收到的代码是由一个不懂
split
ing和
join
ing的人写的,而且。

我认为他们这样做是为了保持恒定的空白量。该条带正在删除所有空白(可能是5个空格和一个制表符),然后将其添加回原来的单个空格中。

以下是代码说明:-

line = (' '.join(line.strip().split())).split()
首先
line.strip()
删除行中的前导空格和尾随空格,然后
.split()
根据空格断开列表

再次
.join
将上一个列表转换为一行分隔的空白。最后,
.split
再次将其转换为列表

此代码是多余的
line=(“”.join(line.strip().split()).split()
。它应该是:-

with open(filename, "r") as f:
    for line in f:
        line = (' '.join(line.strip().split())).split()
如果您再次想
脱衣
使用:-

line = line.split()

你能举一个你想要的输入和输出的例子吗?您是要删除行中的所有空格,还是仅在开头/结尾?我正在阅读其他人编写的代码,并试图理解这行代码的作用。输入是一个包含多行整数的.dat文件。No-arg
split
隐式
strip
s,没有理由在
map中运行它(str.strip
,因为
拆分的每个结果都不会有前导或尾随空格。类似地,
strip
在no-arg
拆分之前进行填充是多余的。感谢您的回复。这就是我要问的。在我看来,最后两个步骤是多余的。感谢您的回复。它能仅仅是line.strip().split()?再次使用join和split()似乎不会改变最终结果。是的,代码大部分是多余的。@LearningToCode首先,他们添加回来的空白在第二次
split
中被删除,因此没有空白被“保留”,更不用说“恒定”了(不管这意味着什么;去掉前导和尾随的空格意味着甚至连空格的运行次数都没有保留下来)。谢谢你的解释。
line = map(str.strip, line.split())