前言:
我是Python新手,在windows7[32位]上使用pythonv3.3。在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>;列表音乐.py
输入要爬网的路径:“M:\Music”
…
C: \Python33\Projects>;记事本输出.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: \音乐\无序\Track1.mp3
M: \音乐\无序\Track2.mp3
…(以此类推)…
[试过的部分]:
从函数setPathList()
交互输入相同代码时,
输出如预期(如果值列表中有5个元素…如果路径超出范围,则失败):
[试运行]:
C:\>;Python
win32上的Python 3.3.2[MSC v.1600 32位(Intel)]
>;>>
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','Artist1','album':'Album1','track':'Track1.mp3'}
{'drive':'M:','directory':'Music','Artist1','album':'Album1','track':'Track2.mp3'}
{'drive':'M:','directory':'Music','Artist1','album':'Album2','track':'Track1.mp3'}
{'drive':'M:','directory':'Music','Artist1','album':'Album2','track':'Track2.mp3'}
{'drive':'M:','directory':'Music','Artist2','album':'Album1','track':'Track1.mp3'}
{'drive':'M:','directory':'Music','Artist2','album':'Album1','track':'Track2.mp3'}
{'drive':'M:','directory':'Music','Artist2','album':'Album2','track':'Track1.mp3'}
{'drive':'M:','directory':'Music','Artist2','album':'Album2','track':'Track2.mp3'}
回溯(最近一次呼叫):
文件“[stdin]”,第3行,在[module]
索引器错误:列表索引超出范围
C: \>;
并且在运行模块时完全失败:
C:\>;python-i列表音乐.py
>;>>打印(k)
回溯(最近一次呼叫):
文件“[stdin]”,第1行,在[module]
名称错误:名称“k”未定义
因此,我需要一种方法来创建一个字典,它创建与文件中的值相匹配的键,以及一种获取字典的正确方法。
这些条目
不能在
os.sep
上拆分为五个部分。只有四个部分。在我想你要解决的问题是,你事先不知道你会有多少条路要走。当你不确定有一个特定的路径布局时,很难做出这样的假设:“哦,好吧,这第二部分是艺术家,这第三部分是专辑…”等等。在
所以我认为一个选择是,如果你知道你只拥有两个 案例,然后分别处理:
但是我想你也应该考虑一下“目录”可能不只是根目录下一级的情况吗?例如,如果您的曲目在M:\MyFolder\Music中,那么假设“directory”是什么,则一切都将关闭。在
底线是,如果你不知道文件夹的潜在布局,我认为有很多可能做出错误的假设。在
相关问题 更多 >
编程相关推荐