我正在尝试编写将从目录中读取所有文本文件的代码,并查找是否有任何文件包含以下文本:
'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
我可以为单个文件执行此操作,但是当涉及到目录时,我无法获得输出。
答案 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:]