我要解决的问题是它无法打印出任何内容。
我的if语句有问题吗?因为它打印了整个txt。我没有添加if语句时的文件。
fname = input('Enter the file name: ')
try:
fhand = open(fname)
except:
print('File cannot be opened:', fname)
exit()
for line in fhand:
line = line.strip()
if line.isupper():
print(line)
该文件包含HTML,CSS,I / O和SQL之类的文件,并且应打印出所有这些字符串。
答案 0 :(得分:0)
要检查是否相等,请使用==
。但是,我很确定您自己在寻找isupper
,而不是检查是否相等。 isupper
返回一个布尔值,可以通过您的if
语句进行检查:
for line in fhand:
line = line.strip()
if line.isupper():
print(line)
答案 1 :(得分:0)
您的if
语句使用=
用于分配,而不是用于比较。而是使用==
。除此之外,string.isupper()
本身就是一个布尔值,因此您将把一个字符串与一个布尔值进行比较,这将不会产生您想要的结果。
答案 2 :(得分:0)
您可以改用filter
函数:
for line in filter(str.isupper, fhand):
print(line)
答案 3 :(得分:-1)
使用with语句而不是try / except来打开文件可能更惯用,因为一旦对象到达作用域末尾,它将处理关闭文件。 https://docs.python.org/3.6/tutorial/inputoutput.html#reading-and-writing-files
with open(path_to_file, 'r') as fileobj:
for line in fileobj:
if line.strip().isupper():
print(line)
-更新-
从上面的链接中,对该答案投反对票的个人:
在处理文件时,最好使用 with 关键字 对象。好处是文件在其被正确关闭后 套件完成,即使在某个时候引发异常。使用 with 也比编写等效的try-finally块
短得多
也
line.strip().isupper()
是完全有效的。
line.strip()返回该行对象的副本,该对象的类型为str(字符串),其中删除了空格,对该对象调用的.isupper()返回一个布尔值。
示例
line = ' AES '
print(line.strip().isupper())
将返回True和
line = ' aes '
print(line.strip().isupper())
将返回False
-更新-
为了完整起见,请关注@ Tomothy32评论
import os
path_to_file = "/path/to/file"
if os.path.isfile(path_to_file):
with open(path_to_file, 'r') as fileobj:
for line in fileobj:
if line.strip().isupper():
print(line)
else:
print("Please pass valid path to file")
exit()