如何打印出文件中所有大写字符串

时间:2019-02-01 00:42:06

标签: python python-3.x

我要解决的问题是它无法打印出任何内容。

我的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之类的文件,并且应打印出所有这些字符串。

4 个答案:

答案 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()