【问题标题】:Remove extra spaces in middle of string split join Python删除字符串拆分连接Python中间的多余空格
【发布时间】:2011-09-02 01:42:30
【问题描述】:

我有以下字符串强制我的 Python 脚本退出:

"625             625 QUAIL DR UNIT B"

我需要删除字符串中间的多余空格,所以我尝试使用以下拆分连接脚本:

import arcgisscripting
import logging 
logger = logging.getLogger()

gp = arcgisscripting.create(9.3)
gp.OverWriteOutput = True

gp.Workspace = "C:\ZP4"
fcs = gp.ListWorkspaces("*","Folder")

for fc in fcs:

    print fc
    rows = gp.UpdateCursor(fc + "//Parcels.shp")
    row = rows.Next()
    while row:
        Name = row.GetValue('SIT_FULL_S').join(s.split())
        print Name
        row.SetValue('SIT_FULL_S', Name)
        rows.updateRow(row)
        row = rows.Next()
    del row
    del rows

【问题讨论】:

  • 您最近是否保存过您的文件,并且您确定您使用的是同一个文件?发布的代码似乎与错误不对应;第 17 行与错误中重现的行不匹配。

标签: python join split


【解决方案1】:

您的源代码和您的错误不匹配,错误表明您没有定义变量SIT_FULL_S

我猜你想要的是:

Name = ' '.join(row.GetValue('SIT_FULL_S').split())

【讨论】:

  • 感谢您的快速回复,我尝试了 Martijn 的建议,效果很好。再次感谢,对于错误声明造成的混淆,我们深表歉意。
【解决方案2】:

有点不清楚,但我认为你需要的是:

" ".join(row.GetValue('SIT_FULL_S').split())

【讨论】:

  • xkcd.com/859 :)。并且还必须是 " ".join(...),否则您将删除所有空格。
  • @utdmr:你是对的。我读到的问题是作者想删除所有空格,但我现在明白这不是他的意思。
【解决方案3】:

我相信你应该使用正则表达式来匹配你找到两个或更多空格的所有地方,然后用一个空格替换它(每次出现)。

这可以使用更短的代码部分来完成:

re.sub(r'\s{2,}', ' ', your_string)

【讨论】:

  • @Andrew 是的,这就是我的意思,我认为你的答案是最好的解决方案,除了它用单个空格替换甚至单个空格(这不是必需的)。
  • 对于这个简单的问题,RE 似乎很密集。
  • @user589983 为什么?你认为这是矫枉过正吗?
  • @user589983 让我再问一遍:你为什么这么认为?
  • @Tadeck:根据我的经验,即使您的解决方案当然是正确的,运行时也会几乎相同。 @user589983:这就是构建正则表达式的目的。说一行代码是矫枉过正需要证明,我们没有运行时要求。 @downvoter:为什么?
【解决方案4】:

使用 re 模块...

>>> import re
>>> str = 'A   B C'
>>> re.sub(r'\s+', ' ', str)
'A B C'

【讨论】:

  • \s+ 表示“一个或多个”(参见documentation),因此可以使用\s{2,} 给出更有效的解决方案(仅匹配“2 个或多个”空白字符的地方发生)。
  • @Tadeck:为了未来的读者,你可能是对的,尽管我要补充一点,我敢打赌差异很小,但无论如何都应该被读者注意。