如何使用其他脚本删除代码中的尾部空白?

就像是:

import fileinput for lines in fileinput.FileInput("test.txt", inplace=1): lines = lines.strip() if lines == '': continue print lines 

但是没有任何东西正在打印在标准输出。

假设一些名为foostring:

 foo.lstrip() # to remove leading white space foo.rstrip() # to remove trailing whitespace foo.strip() # to remove both lead and trailing whitespace 

fileinput似乎是多个inputstream。 这是我会做的:

 with open("test.txt") as file: for line in file: line = line.rstrip() if line: print line 

您看不到print语句的任何输出,因为FileInput在给出关键字参数inplace=1时将stdoutredirect到input文件。 这将导致input文件被有效地重写,如果你以后再看,那么其中的行确实没有尾随或空白(除了print语句每一行结尾的换行符)。

如果您只想删除尾随的空格,则应该使用rstrip()而不是strip() 。 还要注意if lines == '': continue会导致空行被完全删除(无论strip还是rstrip被使用)。

除非你的意图是重写input文件,否则你可能只需要for line in open(filename): 。 否则,通过使用类似如下的方法将输出回显到sys.stderr您可以看到正在写入文件的内容:

 import fileinput import sys for line in (line.rstrip() for line in fileinput.FileInput("test.txt", inplace=1)): if line: print line print >>sys.stderr, line 

如果你想要整理PEP8,这将修剪整个项目的尾部空白:

 import os PATH = '/path/to/your/project' for path, dirs, files in os.walk(PATH): for f in files: file_name, file_extension = os.path.splitext(f) if file_extension == '.py': path_name = os.path.join(path, f) with open(path_name, 'r') as fh: new = [line.rstrip() for line in fh] with open(path_name, 'w') as fh: [fh.write('%s\n' % line) for line in new] 

看来,fileinput.FileInput是一个生成器。 因此,只能迭代一次,然后所有的项目都被消耗掉了,调用下一个方法就会引发StopIteration 。 如果你想多次遍历这些行,你可以把它们放在一个列表中:

 list(fileinput.FileInput('test.txt')) 

然后调用rstrip

另存为fix_whitespace.py

 #!/usr/bin/env python """ Fix trailing whitespace and line endings (to Unix) in a file. Usage: python fix_whitespace.py foo.py """ import os import sys def main(): """ Parse arguments, then fix whitespace in the given file """ if len(sys.argv) == 2: fname = sys.argv[1] if not os.path.exists(fname): print("Python file not found: %s" % sys.argv[1]) sys.exit(1) else: print("Invalid arguments. Usage: python fix_whitespace.py foo.py") sys.exit(1) fix_whitespace(fname) def fix_whitespace(fname): """ Fix whitespace in a file """ with open(fname, "rb") as fo: original_contents = fo.read() # "rU" Universal line endings to Unix with open(fname, "rU") as fo: contents = fo.read() lines = contents.split("\n") fixed = 0 for k, line in enumerate(lines): new_line = line.rstrip() if len(line) != len(new_line): lines[k] = new_line fixed += 1 with open(fname, "wb") as fo: fo.write("\n".join(lines)) if fixed or contents != original_contents: print("************* %s" % os.path.basename(fname)) if fixed: slines = "lines" if fixed > 1 else "line" print("Fixed trailing whitespace on %d %s" \ % (fixed, slines)) if contents != original_contents: print("Fixed line endings to Unix (\\n)") if __name__ == "__main__": main() 

这是sed 真正擅长的事情: $ sed 's/[ \t]*$//' 。 请注意,您可能需要从字面上inputTAB字符而不是\t才能正常工作。