[序言]:
我是 Python 新手,正在使用 Python v3.3 在 Windows 7 [32 位] .在 stackoverflow 上阅读了有关字典以及如何添加新 key 的信息 :值对新的或预先存在的字典,我找到了一些很好的信息。但是,我还没有找到解决以下问题的方法。
[问题]:
我想创建一个空字典,它将根据 动态分配适当数量的键元素数量 在列表中(从文件中的行读取),将值分配给相应的键。注意:(列表中的元素是文件中每一行的输出,由 '\' 和也是要分配给键的值)。
【工作科】:
#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> 记事本 output.txt
[输出]: 输出.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:\音乐\UnOrdered\Track1.mp3
M:\音乐\UnOrdered\Track2.mp3
... (等等) ...
【试用版 block 】:
...
...
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:\>
运行模 block 时完全失败:
C:\> python -i listMusic.py
>>> 打印(k)
回溯(最近一次调用最后一次):
文件“[stdin]”,第 1 行,在 [模 block ] 中
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 的新手,这个脚本的大部分内容都是根据我对语言的(松散/ splinter 的)理解拼凑而成的。回答投票将是那些对产生结果的逻辑给出良好、连贯的解释的投票。
最佳答案
这些条目
M:\Music\UnOrdered\Track1.mp3
M:\Music\UnOrdered\Track2.mp3
不能在
os.sep
上分成五个部分.只有四个部分。
关于python - 来自文件的动态字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19812928/