检查输入文件行中的字符,并返回它们是否仅包含有效字符

时间:2018-11-13 19:59:14

标签: python readline

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

对于此示例,我是说输入文件行可以包含ABCabc或空格。如果该行仅包含这些内容,则应打印单词Valid。如果只是空白,或包含其他任何字符或字母,则应打印出“无效”。

这是我想出的:

我似乎无法将其打印出“有效”

你能告诉为什么吗?谢谢!

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

2 个答案:

答案 0 :(得分:0)

如果在if else语句之前打印出line1的值,则会看到其中包含换行符。 (\n字符。)当您按下键盘上的Enter键时,该字符将添加到每行的末尾,并且您需要丢弃换行符或将其作为有效输入。 / p>

将其包括为有效输入

更改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中的任何一个作为您的变量名被认为是不好的做法。


RegEx解决方案

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

import re

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

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

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

答案 1 :(得分:0)

这是因为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'