如何逐行阅读2个不同的文本文件,并使用python创建包含字典的另一个文件?

时间:2017-04-10 18:13:15

标签: python python-2.7 dictionary text-files file-handling

我有两个文本文件名称 weburl.txt imageurl.txt weburl.txt 包含网站的网址和 imageurl .txt 包含我想创建一个字典的所有图片网址,该字典读取一行 weburl.txt 并生成字典的键, imageurl.txt 行为一个值。 的 weburl.txt

url1
url2
url3
url4
url5......

imageurl.txt

imgurl1
imgurl2
imgurl3
imgurl4
imgurl5

所需的输出是

 {'url1': imgurl1, 'url2': imgurl2, 'url3': imgurl3......}

我正在使用此代码

with open('weburl.txt') as f :
  key = f.readlines()
  with open('imageurl.txt') as g:  
    value = g.readlines()
    dict[key] = [value]

  print dict

我没有得到所需的结果

2 个答案:

答案 0 :(得分:3)

你可以写一些像

这样的东西
with open('weburl.txt') as f, \
        open('imageurl.txt') as g:
    # we use `str.strip` method
    # to remove newline characters
    keys = (line.strip() for line in f)
    values = (line.strip() for line in g)
    result = dict(zip(keys, values))

print(result)

有关docs

zip的更多信息

答案 1 :(得分:1)

语句dict[key] = [value]在很多层面上存在问题,当我们深入了解时,我会感到一种眩晕:

  1. 使用名为dict的变量的明显意图(一个坏主意,因为它会掩盖Python对dict类的内置引用)。我们改为称呼d
  2. 不首先初始化字典实例。如果您将其称为d这样的疏忽,这将使您获得易于理解的NameError。但是,由于您调用它dict,Python实际上将尝试在dict类本身(不支持__setitem__)而不是dict内设置项目实例,所以你会得到一个不同的,更令人困惑的错误。
  3. 尝试进行dict条目分配,其中密钥是不可清除的类型(keylist)。您可以轻松地将list转换为可清除类型tuple,但这不是您想要的,因为您仍然是......
  4. 尝试一次性将一堆值分配给各自的键 。使用d[key] = value语法无法做到这一点。 可以在一个相对简单的陈述中完成,即d=dict(zip(key,value)),但不幸的是,这并不能解决你的问题......
  5. 不从每个键和值的末尾剥离换行符。
  6. 相反,这一行:

    d = dict((k.strip(), v.strip()) for k, v in zip(key, value))
    

    会做你想要的。