[序言]:
我是 Python 新手,我在Windows 7 [32-Bit]上使用Python v3.3。在 stackoverflow 上阅读了有关字典以及如何将新的 key : value 对添加到新的或预先存在的字典中的信息,我发现了一些很好的信息。但是,我还没有找到解决以下问题的方法。
[问题]:
我想创建一个空字典,它将根据列表中元素的数量(从文件中的行读取)动态分配适当数量的键,将值分配给相应的键。
注意:(列表中的元素是文件中每一行的输出,由“\”分隔,也是要分配给键的值)。
【工作部分】:
#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>
[工作运行]: [输出]: 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 ... (等等)...
C:\> cd C:\Python33\Projects
C:\Python33\Projects>listMusic.py
Enter a path to crawl: 'M:\Music'
...
C:\Python33\Projects> notepad output.txt
【试用版】:
...
...
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
Python 3.3.2 [MSC v.1600 32 bit (Intel)] on win32
>>>
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'}
Traceback (most recent call last):
File "[stdin]", line 3, in [module]
IndexError: list index out of range
C:\>
并且在运行模块时完全失败:
所以我需要一种方法来创建一个创建键以匹配文件中的值的字典,以及一种获取字典的正确方法。
C:\> python -i listMusic.py
>>> print(k)
Traceback (most recent call last):
File "[stdin]", line 1, in [module]
NameError: name 'k' is not defined
[资源]:
如何将文件逐行读取到列表中?
如何在 Python 中将 dos 路径拆分为其组件
[最后的想法]:
我确信我可能错过了该脚本的一些简单但重要的部分,以获得所需的输出。正如我所说,我是 python 的新手,这个脚本的大部分是根据我对语言的(松散/破碎的)理解拼凑而成的。已回答的投票将是那些对产生结果的逻辑给出良好、连贯的解释的投票。