如何检查文件是否左对齐



我正在编写一个函数,如果文件中的每一行都左对齐,则返回true,即第一个字符是空格以外的东西。这是我的代码,有人能告诉我我在哪里犯了错误,或者我应该如何做这个函数,这是我到目前为止所做的:

my_file = open("ex4.py", 'r')
def justified(my_file):
    for line in my_file:
        if(line[0:2] == ' '):
            result = False
        else:
            result = True
    return result

line[0:2] == ' '检查前两个字符。根据你的描述,你想检查第一个字符,如line[0] == ' ' .

而且,找到一个后不需要再读更多。否则,您可以重写它。

def justified(my_file):
    return not any(line[0] == ' ' for line in my_file)

更新:正如注释所指出的,我们可以这样写:

def justified(my_file):
    return not any(line.startswith(' ') for line in my_file)

然后,它读起来和自然语言非常相似。

你应该短路你的conditional-if;看起来,只要文件中的最后一行是正确的,结果就会被设置为True。此外,您对空格的检查并不完全有效,但您可以使用.isspace()之类的函数来检查您传递的子字符串中的空白。最后,请注意,您正在获取的子字符串实际上包含两个字符,而不是一个。

my_file = open("ex4.py", 'r')
def justified(my_file):
    for line in my_file:
        if line[0:1].isspace():
            return False
    return True

这样做的好处是,一旦我们知道它不是左对齐的,就不必解析整个文件。

或者,您可能会发现在处理文件时使用此设置很方便,因为它会为您关闭文件。

with open("ex4.py", 'r') as file:
    for line in file:
        if line[0:1].isspace():
          return False
    return True

您可能希望在检查中考虑空白字符而不仅仅是空格:

import string
whitespace = set(string.whitespace)
def justified(f):
    for line in f:
        if line[0] in whitespace:
            return False
    return True

一旦找到以空格开头的行就返回。

可以简化为以下代码:

def justified(f):
    return not any(line[0] in whitespace for line in f)

这将处理空行,即以新行(n)开头的行,回车(r)(以及随后的rn)为未对齐。如果想忽略空行,可以从集合中删除相关字符:

whitespace = set(string.whitespace) - {'n', 'r'}

最新更新