检查输入文件行中的字符,如果它们仅包含有效字符则返回
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'
所以我想 运行 一个程序,它将逐行读取文件,然后根据每行包含的内容打印出有效或无效。
对于这个例子,我是说输入文件行可以包含 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'