我在将文本文件转换为python字典时遇到问题。幸运的是,文本文件有一个":"将我未来的密钥与其值分开。例如,每一行的结构都是这样的" -Project Manager:John Caldwell"。我想循环一个包含大量文本文件的目录。在这个过程中,我想要去掉一个' - '每一行都有。这是我到目前为止的代码:
import sys, traceback,os, csv, itertools
from collections import defaultdict
def get_metadata(filepath):
d = defaultdict(list)
for files in filepath:
if files.endswith(".txt"):
with open(files,'r') as in_file:
for line in in_file:
k,v = line.strip('-').split(':')
d[k].append(v)
return d
root_directory = get_metadata("C:\Random")
print root_directory
这是我运行脚本时得到的结果
defaultdict(<type 'list'>, {})
答案 0 :(得分:3)
问题是"C:\Random"
不是文件列表,它只是一个字符串。因此,for files in filepath
为您提供'C'
,然后为':'
,然后为'\'
,依此类推。这些都不以.txt
结尾,因此您不会打开任何文件或执行任何其他操作。
你想要的可能是for files in os.listdir(filepath):
。
或者,如果要打开该目录或任何子目录中的所有文件(递归),请使用walk
(请参阅链接的文档以获取示例代码)。
正如bgporter指出的那样,如果您调用listdir
的唯一原因是然后根据模式检查每个文件名,您可能希望使用for files in glob.glob(os.path.join(filepath, '*.txt')):
来跳过{{1}的需要测试。