Python:从目录中读取所有文件

时间:2014-06-27 11:07:48

标签: python

我正在尝试编写将从目录中读取所有文本文件的代码,并查找是否有任何文件包含以下文本:

'this is color=green'
'its color=orange'

然后它必须打印特定的颜色。我的代码没有打印输出:

import os
path = r'C:\Python27' 
data = {}

for dir_entry in os.listdir(path):
    dir_entry_path = os.path.join(path, dir_entry)
    if os.path.isfile(dir_entry_path):
        with open(dir_entry_path, 'r') as my_file:
            data[dir_entry] = my_file.read()
            for line in my_file:
                for part in line.split():
                    if "color=" in part:
                        print part

我的输出必须如下:

color=green
color=orange

我可以为单个文件执行此操作,但是当涉及到目录时,我无法获得输出。

3 个答案:

答案 0 :(得分:5)

看起来你正在阅读文件内容两次:

data[dir_entry] = my_file.read()
for line in my_file:

因此文件的全部内容都在数据[dir_entry]中,文件句柄现在位于my_file的末尾,没有任何内容可供阅读。如果你只是在my_file中使用' for行:'方法,它应该工作:

for dir_entry in os.listdir(path):
    dir_entry_path = os.path.join(path, dir_entry)
    if os.path.isfile(dir_entry_path):
        with open(dir_entry_path, 'r') as my_file:
            for line in my_file:
                for part in line.split():
                    if "color=" in part:
                        print part

答案 1 :(得分:1)

import os
path = r'C:\Python27' 
data = {}

found = False
for dir_entry in os.listdir(path):
    dir_entry_path = os.path.join(path, dir_entry)
    if os.path.isfile(dir_entry_path):
        with open(dir_entry_path, 'r') as my_file:
            a = my_file.readlines()
            for line in a:
                for part in line.split():
                    if "color=" in part:
                        print part.split('=')[1]

编辑:根据评论更改了代码,

答案 2 :(得分:1)

正如其他答案中所提到的,你要两次读取文件,因此指针位于文件的末尾。

如果您确实希望使用文件内容传播数据以及打印相关的颜色线,您可以从数据中读取:

data = {}

for dir_item in os.listdir(path):
    dir_item_path = os.path.join(path, dir_item)
    if os.path.isfile(dir_item_path):
        with open(dir_item_path, 'r') as f:
            data[dir_item] = f.read()
            for part in data[dir_item].split():
                if part.startswith('color='):
                    print part[6:]