我可以在 for 循环中使用 with 语句吗?

Can I use with statements inside of for loops?

我正在尝试创建一个 "file crawler" 来浏览我的目录并在文件中搜索 return 目录的关键字。我有 .txt 文件,其中包含我使用 with 语句访问的笔记的所有标题,我使用 for 循环顺序搜索内容。我的问题是正在产生错误

这里是classes.txt的例子,它们是目录名

Physics,GEology,

这里是 notes.txt 的例子,它们是 .txt

的名称
ROck,other rock,

这是您可以在文件中找到的内容

This is a rock and it is formed by silicon

如果我为它生成的密钥输入 'silicon' 并且出现错误

这是函数,我知道它有点草率,所以请耐心等待。

def find_notes():

    print('enter key words you had in your notes')
    key = input('KEY> ')
    with open('classes.txt','r') as f:
        exist = False
        contents = f.read()
        contents = contents.split(',')
        for i in contents:
            os.chdir(i)
            with open('notes.txt', 'r') as notes: # save notes into a .txt in the working direcotry,,, Check
                class_notes = notes.read()
                class_notes = class_notes.split(',')
            for r in class_notes:
                notes_file = r + '.txt'
                print(notes_file)
                with open(notes_file, 'r') as stinkey:
                    real = stinkey.read()
                    if key in real:
                        file = os.getcwd()
                        file = file.split('\')
                        exist = True
                        file_name = r + '.txt'
            reverse_dir()
        if exist == True:
            print('The notes are in:', file[-1] )# print the directory
            print('The title of the notes are ', file_name)
        else:
            print('Notes could not be found')

这一行引用的文件

with open('notes.txt', 'r') as notes:

要么没有内容(空字符串),要么文本中连续有两个逗号。当发生这种情况时,这一行:

class_notes = class_notes.split(',')

将分配一个空字符串“”,它将链接到 .txt 并导致程序尝试打开名为“.txt”的不存在文件

编辑:将分割线替换为:

class_notes = [x for x in class_notes.split(',') if x]

它将保留字符串、修剪空字符串、None 值和类似的