2

我是 Python 新手,我正在做一项小任务。dict.get()在 Python中传递方法中的变量时遇到问题。

这是我正在使用的代码示例:

inputFile = open("Result_table_file.txt")

outputFile = open("Result.txt","w")

file =  open("matadata.txt")

from collections import defaultdict
d =  defaultdict(dict)

for line in file:
    name,values = line.split(':',1)
    d[name] = values

for record in inputFile:
    recordSplit = record.split(",")
    filename = recordSplit[3]
    metadataValue = d.get(filename)
    print "FileName :" + filename
    print metadataValue
    print "Record : " + record

输出是:

FileName : Image01.tif
Metadata : None
Record : 100,134423.0,13911111,Image01

这段代码工作正常。唯一的问题是当我将filename变量传递给metadataValue = d.get(filename)方法时,它给我的结果为None.

任何人都可以建议我可能是什么问题以及我该如何解决它。

当我手动创建文件名变量而不是从文件中获取值时,我还发现了另一件事。它工作正常。

例如 :

文件名 = "Image01" d.get(文件名)

我得到了正确的输出,而如果我在读取文件时获得了价值,这件事就不起作用了。

例如

对于 inputFile 中的记录:recordSplit = record.split(",") filename = recordSplit[3] metadataValue = d.get(filename) print "FileName :" + filename print metadataValue print "Record :" + record

任何想法?

4

3 回答 3

1

如果d[filename]不存在,则get返回None

d[filename]如果不存在,则添加第二个参数以默认返回:

In [2]: d = {'a':1, 'b':2}

In [7]: print d.get('a')
1

In [8]: print d.get('c')
None

In [9]: print d.get('c', 77)
77
于 2013-03-19T16:23:47.427 回答
0

我在这里看到了一些不一致的地方。

怎么可能record等于100,134423.0,13911111,Image01,而filename由 计算的record.split(",")[3]等于Image01.tif

如果filename真的等于Image01.tif并且d包含键的条目Image01,而不是Image01.tif,那么你会得到None

正如有人建议的那样,您应该在计算之前打印dand以查看发生了什么。filenamemetadataValue

编辑

好的,文件中的行包括(至少在我的计算机上)一个尾随\n字符,打印时可能不可见。尝试filename.strip()在接听电话之前做。

于 2013-03-19T18:23:48.983 回答
0

当我们使用不存在的键调用 dict 上的 get 方法时,该方法将返回 None。在您的情况下,这意味着 d 没有名为 filename 的键。我想问题是你应该替换为 . 您打开一个不存在的文件并从中读取,然后将您读取的内容放入 d.So d 是 juse None.So d 没有键名文件名。

于 2013-03-19T16:36:58.137 回答