【发布时间】:2013-11-17 17:45:41
【问题描述】:
[序言]:
我是 Python 新手,在 Windows 7 [32-Bit] 上使用 Python v3.3。在 stackoverflow 上阅读了有关字典以及如何将新的键:值对添加到新的或预先存在的字典的信息,我发现了一些很好的信息。但是,我还没有找到解决以下问题的方法。
[问题]:
我想创建一个空字典,它将根据列表中的元素数(从文件中的行读取)动态分配适当数量的键,分配
注意:(列表中的元素是文件中每一行的输出,由 ' \ ' 分隔,也是要分配的值到键)。
[工作部分]:
#listMusic.py
import os; from fnmatch import fnmatch
# This works like a charm for producing a file with the output of the
# absolute paths we want to grab our list elements from.
def getWorkingPath(rootPath):
outputFile = open('output.txt', 'w')
filePattern = "*.mp3"
for path, subdirs, files in os.walk(rootPath):
for name in files:
if fnmatch(name, filePattern):
path_list = os.path.join(path, name + "\n")
outputData = outputFile.write(path_list)
outputFile.close()
# def setPathList():
'''continued in [Tried Section]'''
rootPath = getWorkingPath(input('Enter a path to crawl: '))<br>
[工作运行]:
C:\> cd C:\Python33\Projects
C:\Python33\Projects>listMusic.py
输入要抓取的路径:'M:\Music'
...
C:\Python33\Projects> 记事本输出.txt
[输出]: output.txt
M:\Music\Artist1\Album1\Track1.mp3
M:\Music\Artist1\Album1\Track2.mp3
M:\Music\Artist1\Album2\Track1.mp3
M:\Music\Artist1\Album2\Track2.mp3
M:\Music\Artist2\Album1\Track1.mp3
M:\Music\Artist2\Album1\Track2.mp3
M:\Music\UnOrdered\Track1.mp3
M:\Music\UnOrdered\Track2.mp3
... (等等)...
[尝试部分]:
...
...
def setPathList():
for i in open(r'output.txt', 'r'):
v = i.rstrip("\n").split(os.sep)
k = {'drive':v[0], 'directory':v[1], 'artist':v[2],
'album':v[3], 'track':v[4]}
print(k)
rootPath = getWorkingPath(input('Enter a path to crawl: '))
从函数setPathList() 以交互方式输入相同代码时,
输出符合预期(如果值列表中有 5 个元素...如果路径超出范围则失败):
[试运行]:强>
C:\>Python
Win32 上的 Python 3.3.2 [MSC v.1600 32 位(英特尔)]
>>>
for i in open(r'output.txt', 'r'):
v = i.rstrip("\n").split(os.sep)
k = {'drive':v[0], 'directory':v[1], 'artist':v[2],
'album':v[3], 'track':v[4]}
print(k)
...
{'drive': 'M:', 'directory': 'Music', 'artist': 'Artist1', 'album': 'Album1', 'track': 'Track1.mp3'}
{'drive': 'M:', 'directory': 'Music', 'artist': 'Artist1', 'album': 'Album1', 'track': 'Track2.mp3'}
{'drive': 'M:', 'directory': 'Music', 'artist': 'Artist1', 'album': 'Album2', 'track': 'Track1.mp3'}
{'drive': 'M:', 'directory': 'Music', 'artist': 'Artist1', 'album': 'Album2', 'track': 'Track2.mp3'}
{'drive': 'M:', 'directory': 'Music', 'artist': 'Artist2', 'album': 'Album1', 'track': 'Track1.mp3'}
{'drive': 'M:', 'directory': 'Music', 'artist': 'Artist2', 'album': 'Album1', 'track': 'Track2.mp3'}
{'drive': 'M:', 'directory': 'Music', 'artist': 'Artist2', 'album': 'Album2', 'track': 'Track1.mp3'}
{'drive': 'M:', 'directory': 'Music', 'artist': 'Artist2', 'album': 'Album2', 'track': 'Track2.mp3'}
回溯(最近一次通话最后一次):
文件“[stdin]”,第 3 行,在 [module]
IndexError:列表索引超出范围
C:\>
运行模块时完全失败:
C:\> python -i listMusic.py
>>> 打印(k)
回溯(最近一次通话最后一次):
文件“[stdin]”,第 1 行,在 [module]
NameError:名称“k”未定义
所以我需要一种方法来创建一个字典,该字典创建键以匹配文件中的值,以及获取字典的正确方法。
[资源]:
How do I read a file line-by-line into a list?
How to split a dos path into its components in Python
[最后的想法]:
我确信我可能缺少该脚本的一些简单但重要的部分来获得所需的输出。正如我所说,我是 python 的新手,这个脚本的大部分内容是根据我对语言的(松散/破碎的)理解拼凑而成的。已回答的投票将是那些对产生结果的逻辑给出良好、连贯的解释的投票。
【问题讨论】:
标签: python python-3.x dictionary