检查输入文件行中的字符,如果它们仅包含有效字符则返回

Checking characters in an input file line, and returning if they contain only valid characters

所以我想 运行 一个程序,它将逐行读取文件,然后根据每行包含的内容打印出有效或无效。

对于这个例子,我是说输入文件行可以包含 ABCabc 或 space。如果该行仅包含这些内容,则应打印 Valid 一词。如果它只是白色 space,或者包含任何其他字符或字母,它应该打印出“Invalid”。

这是我想出的:

我似乎无法让它打印出“有效”

你能说说为什么吗?谢谢!

input = sys.argv[1]
input = open(input,"r")
correctInput = ‘ABCabc ‘

line1 = input.readline()

while line1 != "":
    if all(char in correctInput for char in line1):
        print “Valid”
        line2 = input.readline()
    else:
        print “Invalid”
        line2 = input.readline()
    line1 = line2

如果您在 if else 语句之前打印出 line1 的值,您会看到其中有一个换行符。 (\n 字符。)这是每当您按下键盘上的回车键时添加到每行末尾的字符,您需要丢弃换行符或将它们作为有效输入。

将其包含为有效输入

改变correctInput = 'ABCabc '

correctInput = 'ABCabc \n'.


或丢弃换行符更改

if all(char in correctInput for char in line1):

if all(char in correctInput for char in line1.replace('\n', '')):


两种方法都行。

顺便说一下,input 是 Python 中的一个函数。尽管您可以将其用作变量名,但这样做会阻止您在程序中使用输入函数。因此,使用任何 built in function names 作为变量名被认为是不好的做法。


正则表达式解决方案

为了好玩,我提出了以下解决方案,它使用正则表达式解决了您的问题。

import re

with open(sys.argv[1]) as fh:
  valid_lines = re.findall('^[ABCabc ]+\n', fh.read())

这会找到任何使用模式 '^[ABCabc ]+\n' 的有效行。这个正则表达式模式有什么作用?

  • ^ 符号表示一行的开始
  • 然后是 [ABCabc ]。使用方括号时,只允许方括号内的字符。
  • 括号后的+表示括号内的字符必须出现1次或多次。
  • 最后,我们确保找到的有效字符后跟换行符 (\n)。这确保我们检查了整行的有效字符。

这是因为 readline 没有从行尾删除 '\n'。您可以通过将整个文件内容分成多行来忽略该问题,而不是逐行验证它们。

import sys

file_name = sys.argv[1]
file = open(file_name ,"r")
correctInput = 'ABCabc '

lines = file.read().splitlines()

for line1 in lines:
    if all(char in correctInput for char in line1):
        print 'Valid'
    else:
        print 'Invalid'