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

时间:2019-11-30 22:58:27

标签: python file-io with-statement

我试图创建一个“文件搜寻器”以遍历我的目录,并在文件中搜索关键字以返回目录。我有.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')

1 个答案:

答案 0 :(得分:0)

此行中引用的文件

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]

它将保留字符串,修剪空字符串,无值和类似值