如何将文件转换为字典?
- 2025-03-05 09:17:00
- admin 原创
- 90
问题描述:
我有一个包含两列的文件,即
1 a
2 b
3 c
我希望将此文件读入字典,其中第 1 列是键,第 2 列是值,即
d = {1:'a', 2:'b', 3:'c'}
文件很小,因此效率不是问题。
解决方案 1:
d = {}
with open("file.txt") as f:
for line in f:
(key, val) = line.split()
d[int(key)] = val
解决方案 2:
这将使密钥保留为字符串:
with open('infile.txt') as f:
d = dict(x.rstrip().split(None, 1) for x in f)
解决方案 3:
您还可以使用字典理解,例如:
with open("infile.txt") as f:
d = {int(k): v for line in f for (k, v) in [line.strip().split(None, 1)]}
解决方案 4:
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)
解决方案 5:
通过词典理解
d = { line.split()[0] : line.split()[1] for line in open("file.txt") }
或者通过 pandas
import pandas as pd
d = pd.read_csv("file.txt", delimiter=" ", header = None).to_dict()[0]
解决方案 6:
简单选项
大多数存储字典的方法都使用 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
解决方案 7:
如果你喜欢一句话,请尝试:
d=eval('{'+re.sub('\'[s]*?\'','\':\'',re.sub(r'([^'+input('SEP: ')+',]+)','\''+r''+'\'',open(input('FILE: ')).read().rstrip('
').replace('
',',')))+'}')
输入 FILE = 文件路径,SEP = 键值分隔符
虽然这不是最优雅或最有效的方式,但仍然很有趣:)
解决方案 8:
我认为使用生成器更符合 Python 风格(可能需要 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()}
这还将过滤掉不以整数开头或不包含两个项目的行。
解决方案 9:
我需要从文本文件中获取值并用作键值对。文本文件中的内容为键 = 值,因此我使用了以“=”分隔符的拆分方法,并写下下面的代码
d = {}
file = open("filename.txt")
for x in file:
f = x.split("=")
d.update({f[0].strip(): f[1].strip()})
通过使用 strip 方法,可以删除“=”分隔符之前或之后的任何空格,这样你就可以获得字典格式的预期数据
解决方案 10:
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)
解决方案 11:
这是另一种选择...
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:]
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD