如何将文件转换为字典?

时间:2011-01-26 11:24:22

标签: python file dictionary

我有一个包含两列的文件,即

1 a 
2 b 
3 c

我希望将此文件读入字典,以便第1列是键,第2列是值,即

d = {1:'a', 2:'b', 3:'c'}

文件很小,因此效率不是问题。

11 个答案:

答案 0 :(得分:130)

d = {}
with open("file.txt") as f:
    for line in f:
       (key, val) = line.split()
       d[int(key)] = val

答案 1 :(得分:13)

这会将密钥保留为字符串:

with open('infile.txt') as f:
  d = dict(x.rstrip().split(None, 1) for x in f)

答案 2 :(得分:7)

如果你的python版本是2.7+,你也可以使用dict comprehension之类的:

with open('infile.txt') as f:
  {int(k): v for line in f for (k, v) in (line.strip().split(None, 1),)}

答案 3 :(得分:3)

def get_pair(line):
    key, sep, value = line.strip().partition(" ")
    return int(key), value

with open("file.txt") as fd:    
    d = dict(get_pair(line) for line in fd)

答案 4 :(得分:3)

通过字典理解

d = { line.split()[0] : line.split()[1] for line in open("file.txt") }

或熊猫

import pandas as pd 
d = pd.read_csv("file.txt", delimiter=" ", header = None).to_dict()[0]

答案 5 :(得分:1)

恕我直言使用发电机更加pythonic(可能你需要2.7+):

with open('infile.txt') as fd:
    pairs = (line.split(None) for line in fd)
    res   = {int(pair[0]):pair[1] for pair in pairs if len(pair) == 2 and pair[0].isdigit()}

这也将过滤掉不是以整数开头或者不包含两个项

的行

答案 6 :(得分:0)

import re

my_file = open('file.txt','r')
d = {}
for i in my_file:
  g = re.search(r'(\d+)\s+(.*)', i) # glob line containing an int and a string
  d[int(g.group(1))] = g.group(2)

答案 7 :(得分:0)

如果您喜欢一个衬垫,请尝试:

d=eval('{'+re.sub('\'[\s]*?\'','\':\'',re.sub(r'([^'+input('SEP: ')+',]+)','\''+r'\1'+'\'',open(input('FILE: ')).read().rstrip('\n').replace('\n',',')))+'}')

输入FILE =文件路径,SEP =键值分隔符

不是最优雅或最有效的方式,但仍然非常有趣:)

答案 8 :(得分:0)

这是另一种选择......

events = {}
for line in csv.reader(open(os.path.join(path, 'events.txt'), "rb")):
    if line[0][0] == "#":
        continue
    events[line[0]] = line[1] if len(line) == 2 else line[1:]

答案 9 :(得分:0)

简单选项

大多数用于存储字典的方法都使用JSON,Pickle或行读取。如果您不是在Python之外编辑字典,那么即使是复杂的字典,此简单方法也已足够。尽管对于较大的词典,Pickle会更好。

x = {1:'a', 2:'b', 3:'c'}
f = 'file.txt'
print(x, file=open(f,'w'))    # file.txt >>> {1:'a', 2:'b', 3:'c'}
y = eval(open(f,'r').read())
print(x==y)                   # >>> True

答案 10 :(得分:0)

我需要从文本文件中获取值并用作键值对。我在文本文件中将内容作为键=值,因此我使用了分隔符为“ =”和 写在下面的代码

d = {}
file = open("filename.txt")
for x in file:
    f = x.split("=")
    d.update({f[0].strip(): f[1].strip()})

通过剥离方法,删除“ =”分隔符之前或之后的任何空格,您将获得字典格式的预期数据