【问题标题】:Striping space while preserving new line separator python在保留新行分隔符python的同时条带化空间
【发布时间】:2013-09-15 16:07:49
【问题描述】:

我想将空格剥离为单个空格,但在文件中保留一个空行分隔符。我已经尝试了以下代码,它似乎可以工作。

如何在不写入文件两次的情况下做到这一点?

我想收集我所有的替换可能都在一个文本文件中,并一次将它们全部写入。

i = open('inputfile.txt','r')
infile = i.readlines()
o = open('outputfile.txt','w')
for line in infile:
    if line == '\n':
        o.write('\n\n')
    else:
        o.write(re.sub(r'\s+',' ',line))
o.close()
i.close()

【问题讨论】:

  • 你为什么不喜欢你拥有的代码?
  • 你能澄清一下你写两次的意思吗?您是否只想存储所有数据并进行一次写入调用? (另外,你的 else 缺少一个标签)
  • @Foon,这正是我想要的,很抱歉造成混乱。当我写“文本文件”时,我正在考虑“文本”或只是字符串。

标签: python newline space strip


【解决方案1】:

在此处查看我对这个问题的回答:Python save file to csv

我认为re.sub() 的替代品会让您因'\s' 值而绊倒您。只需替换 ' ' 即可。

【讨论】:

  • brandosimpkins,您的解决方案有效。我将r'\s+' 更改为[ ]+ 并删除if...else。我还从那里提出的问题中得到了存储中间结果的想法。谢谢。
【解决方案2】:
i = open('inputfile.txt','r')
infile = i.readlines()
o = open('outputfile.txt','w')
newoutputfile = ""
for line in infile:
        if line == '\n':
                newoutputfile+= '\n\n'
else:
        newoutputfile +=' '.join(line.split())
o.write(newoutputfile)
o.close()

【讨论】:

  • 如果您更新答案并简要说明其工作原理以及不同之处,这将对其他人有所帮助。
  • LeonardoPF,我在这里寻找类似你的解决方案,但我认为你的代码被覆盖了。它只显示输入文件中的新行和最后一句。
  • 这有一个不正确的 else 与 for 循环对齐,而不是在 foor 循环内的预期 if 块。 Python有一个方便但未被充分认识的特性,你可以有一个匹配for循环的else(如果你的for循环正常执行,就会执行)。这就是为什么它正在做你所看到的行为。 (当然,如果类似列表的对象为空,我认为它会执行 else ,我认为这也有不同的原因)
猜你喜欢
  • 2019-12-26
  • 2022-11-18
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多