基本上,我打开一些文件并删除该文件中每一行的所有空格。 代码段:
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)我得到了这个输出:
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
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的。
答案 0 :(得分:1)
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来模拟文件,只需用你的fileobj替换一个文件。
答案 1 :(得分:0)
您似乎想要输出
textures/common/lightgrid\ntextures/common/mirror1\n...
而你正在获得
textures/common/lightgrid\n
textures/common/mirror1\n
...
这是因为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()
。