Python:从目录读取所有文件

0 投票
3 回答
794 浏览
提问于 2025-04-18 11:18

我正在尝试写一段代码,这段代码可以读取一个文件夹里的所有文本文件,并检查这些文件中是否有类似的内容:

'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 个回答

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]

编辑:根据评论修改了代码。

5

看起来你在读取文件内容的时候做了两次:

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

所以文件的全部内容都在 data[dir_entry] 里,而文件指针现在已经到达了 my_file 的末尾,已经没有东西可以读取了。如果你直接使用 'for line in my_file:' 这种方法,就应该可以正常工作:

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

正如其他回答提到的,你读取文件的次数太多了,所以指针已经移动到文件的末尾了。

如果你想要在打印相关颜色的行的同时,也能获取文件中的数据,你可以从数据中读取:

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:]

撰写回答