【问题标题】:Reading only the files in top directory in python只读取python顶层目录中的文件
【发布时间】:2015-04-08 21:18:47
【问题描述】:

我有一个包含许多 .txt 文件的目录,同一目录包含另一个包含 .json 文件的目录。我试图仅读取文本文件并对它们应用函数,然后读取 JSON 文件并对这些文件应用不同的函数。如何单独访问每种文件类型,而不是一次访问所有文件和目录?这是一个基本的代码 sn-p 来说明我正在尝试做的事情。

textfiles = glob.glob(os.path.join(rootdir, '*.txt'))
jsonfiles = glob.glob(os.path.join(rootdir, '*.json'))

for f in textfiles:
    title = linecache.getline(f,1)
    titles = title[1:-1].split(',')#to convert what I read into list.
    do other stuff here...
    for item in titles:
        with open(f,"r") as fi:
            poems = json.load(fi)
        for fi in jsonfiles:
            with open(fi,"r") as file:
                poems = json.load(file)
            if(song["title"]==item):
                print(item)

【问题讨论】:

    标签: python json file directory readfile


    【解决方案1】:

    如果您只需要一个目录中的文件,请不要使用os.walk()

    您可以使用glob module 轻松收集特定类型的文件:

    import glob
    import os.path
    
    textfiles = glob.glob(os.path.join(rootdir, '*.txt'))
    jsonfiles = glob.glob(os.path.join(rootdir, 'subdue', '*.json'))
    

    这些 glob 只能找到文本 rootdir 和(命名的)子目录中的 JSON 文件。

    【讨论】:

    • 感谢您的快速响应,但 JSON 文件位于包含 .txt 文件的目录中的目录中。 JSON 用于使用 item(从 .txt 检索)的 populate_graph 函数。也许我的大脑有点慢,但我不明白如何在这种情况下使用 glob?
    • @ramez 那么你可以使用子目录的路径吗?
    • 听起来不错,我根据您的回答更改了代码,但在我看来,访问“项目”的唯一方法是嵌套循环。每个循环都会生成“item”。关于如何在不使用嵌套循环的情况下完成此操作的任何输入?谢谢你
    • @ramez 而不是从根本上改变您的问题以使用我提出的代码(从而使我的答案无效)您能否澄清文本文件中的内容类型以及它与 JSON 文件的关系?我不太明白这两者之间的关系以及您要完成的工作。
    【解决方案2】:
    from os import listdir
    from os.path import isfile, join
    onlyfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]
    onlytxtfiles = filter(onlyfiles, lambda(filename):filename.endswith('.txt'))
    for fname in onlytxtfiles:
       ...
    

    填写您想代替... 做的事情,如果您需要进一步的帮助,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 2014-11-10
      • 2022-06-10
      • 2014-11-07
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多