如何检查文件中的行数是否等于每行中的字符数?

时间:2013-04-16 21:46:58

标签: python

读取指定的文件并将其内容视为字符串列表(每行一个)。 检查输入文件中的以下条件:

该文件必须存在且可供阅读。换句话说,对open的调用不应该引发异常。

该文件必须包含3到10行文本。也就是说,3是可接受的最小行数,10是最大行数。

所有行必须包含完全相同的字符数。

每行必须包含3到10个字符。也就是说,3是可接受的最小字符数,10是最大值。每行的字符数不必等于文件中的行数。

唯一可接受的字符是'x''X''y''Y''_'

correct_string = False
while correct_string is False:

    string = input("Enter a string? ")
    if len(string) != len(string):
        print("Error: string must have the same number of characters.")
    else:
        incorrect_char = False
        for i in string:
            if i != "X" and i != "x" and i != 'Y' and i != 'y' and i != "_":
                incorrect_char = True
        if incorrect_char is False:
            correct_string = True
        else:
            print("Invalid Character. Contains characters other than 'X', 'x', 'Y' 'y',and '_'")

2 个答案:

答案 0 :(得分:2)

此代码检查文件中的行数是否等于每行中的字符数。它不会检查任何其他标准,因为它们不是问题的一部分。

with open('input.txt') as in_file:
  lines = [ line.rstrip('\n') for line in in_file]

if any( len(line) != len(lines) for line in lines):
  print "NOT SQUARE!"
else:
  print "SQUARE!"

答案 1 :(得分:1)

如果有效,这将执行您要求的操作并返回列表。如果没有,它将引发异常 - 您可以根据需要进行自定义。

def load_file(filename):

    valid_chars = set('xXyY_')
    min_len = 3
    max_len = 10
    data = []

    # load the file
    with open(filename) as f:
        num_rows = 0
        for line in f:
            line = line.rstrip()
            print line, len(line)
            num_rows += 1
            # load validation
            if num_rows > max_len:
                raise Exception('Max rows exceeded')
            if len(line) > max_len:
                raise Exception('Max columns exceeded')
            if not set(line) <= valid_chars:
                print set(line), valid_chars
                raise Exception('Invalid input')
            data.append(line)

    if num_rows < min_len:
        raise Exception('Not enough rows')

    # validate row length
    if any( len(line) <> num_rows for line in data):
        raise Exception('Invalid row length')

    return data

致电:

>>> load_file('test.txt')
['xxx', 'xYx', 'xXx']

您可以根据需要进行调整。希望这会有所帮助。