Python2.6.6“幻影”空白

2024-10-01 00:17:01 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上,我打开一些文件,并从文件中的每一行删除所有空白。 代码段:

for filepath in filelist:
        if filepath.endswith(".shader"):
            shaderfile = open(filepath,"r").readlines()
            for line in shaderfile:
                line = Left(line, line.find("\n"))+"\n"
                line = line.replace(" ","")
                if line.find("common/")>-1:
                    print(line.replace("\n","\\n"))

根据请求,我删除了不太重要的代码。在

有两件事很奇怪:

1)有些行以“\n\n”结尾

2)我得到这个输出:

^{pr2}$

3)当我将输出粘贴到这里时,它看起来像:

textures/common/lightgrid\n
textures/common/mirror1\n
textures/common/mirror2\n
maptextures/common/invisible.tga\n
textures/common/watercaulk\n
textures/common/clipnokick\n
textures/common/invisible\n

我真的不知道发生了什么事。是print()的错误吗? 很抱歉格式不好,但这不是我的错,是stackoverflow的错


Tags: 文件inforif代码段linecommonfind
2条回答
from StringIO import StringIO

a = StringIO("""textures/common/lightgrid
textures/common/mirror1

textures/common/mirror2

maptextures/common/invisible.tga

textures/common/watercaulk

textures/common/clipnokick

textures/common/invisible""")


def clean_lines(fileobj):
    for line in fileobj:
        if line:
            line = line.strip()
            if line:
                yield "%s\n" % line


print [line for line in clean_lines(a)]

我使用stringIO来模拟一个文件,只需将a替换为任何fileobj。在

看起来你想要的是

textures/common/lightgrid\ntextures/common/mirror1\n...

而你却得到了

^{pr2}$

这是因为print语句添加了一个隐式换行符。在

可以使用普通文件输出:

from sys import stdout
# ...
stdout.write("foo") # adds no implicit newline

您可以使用从Python 3移植回来的函数print()

from __future__ import print_function
#
print("foo", end="") # use empty string instead of default newline

另外,如果您需要从字符串的内部删除空格,那么可以使其更简单,也可能更高效。在

import re # regular expressions
whitespace_rx = re.compile(r"\s+") # matches any number of whitespace
# ...
splinters = whitespace_rx.split(raw_line) # "a b\nc" -> ['a','b','c']
compacted_line = "".join(splinters) # ['a','b','c'] -> 'abc'

当然,您可以将splinters替换为.split()调用。在

相关问题 更多 >