无法从目录中读取文件

时间:2015-04-10 02:34:46

标签: python python-2.7

我有以下目录结构,

F:\TestData

和TestData包含20个名称为node1, node2,..., node20的文件夹 每个节点文件夹包含名称为log.10.X

的文件

我需要从所有节点文件夹访问每个日志文件,我已经写了代码,但是它说,File not found - log.*

CODE:

directory = "F:\TestData"
p = subprocess.Popen(["find", "./" + directory, "-name", "log.*"], stdout=subprocess.PIPE)
output, err = p.communicate()
foutput = output.split("\n")

4 个答案:

答案 0 :(得分:1)

与POSIX shell不同,Python不会自动在字符串中执行通配(将*等解释为与相关目录中的文件相关的通配符)。但是,它确实为此提供了a glob module。您可以使用它来获取匹配文件名的列表:

import glob

filenames = glob.glob(r'F:\TestData\node*\log.*')

答案 1 :(得分:0)

您可以使用python获取目录中的文件列表

import os
directory = "F:\TestData\"
file_list = os.listdir(directory)
log_list = filter(lambda x: x.startswith("log"), file_list)
哦,你必须编写代码来迭代子目录。 父目录中的第一个os.listdir(),并迭代子目录以获取文件

答案 2 :(得分:0)

Python的glob模块可能是一个选项。

import glob
directory = 'F:\TestData'
logcontents = [open(f,'r').read() for f in glob.glob(directory + '\node*\log.*')]

答案 3 :(得分:0)

您还可以使用walk,如下所示:

import os
directory = "F:\TestData"
for i in os.walk(directory):
    # i like this:
    # ('F:\\TestData', ['node1', 'node2', 'node3'], [])
    # ('F:\\TestData\\node1', [], ['log.1.txt'])
    # ('F:\\TestData\\node2', [], ['log.2.txt'])
    print i
    if i[2] != []:
        # TODO: use the path to finish other
        # If dictory noden have some log file, you should use i[2][n].
        # So, if you only need log.n.txt, you only use i[2][n].
        print os.path.join(i[0], i[2][0])