所以我想运行一个程序,该程序将逐行读取文件,然后根据每行包含的内容打印出有效或无效。
对于此示例,我是说输入文件行可以包含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
答案 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中的任何一个作为您的变量名被认为是不好的做法。
只是为了好玩,我想出了以下解决方案,该解决方案使用正则表达式解决了您的问题。
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'