如何使用另一个脚本删除代码中的尾随空白?

2024-04-18 12:43:56 发布

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

类似于:

import fileinput

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

但stdout上什么也没印。

假设有一个名为foo的字符串:

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

Tags: tointestimporttxtforfooremove
3条回答

您看不到来自print语句的任何输出,因为FileInput在给定关键字参数inplace=1时将stdout重定向到输入文件。这会导致输入文件被有效地重写,如果您事后查看它,其中的行将确实没有尾随或前导空格(除了print语句添加回来的每个行尾的换行符)。

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

除非您的目的是重写输入文件,否则您可能只需使用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

fileinput似乎用于多个输入流。这就是我要做的:

with open("test.txt") as file:
    for line in file:
        line = line.rstrip()
        if line:
            print(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]

相关问题 更多 >