我有一个包含两列的文件,即
1 a
2 b
3 c
我希望将此文件读入字典,使第1列为键,第2列为值,即
d = {1:'a', 2:'b', 3:'c'}
该文件很小,因此效率不是问题。
我有一个包含两列的文件,即
1 a
2 b
3 c
我希望将此文件读入字典,使第1列为键,第2列为值,即
d = {1:'a', 2:'b', 3:'c'}
该文件很小,因此效率不是问题。
Answers:
d = {}
with open("file.txt") as f:
for line in f:
(key, val) = line.split()
d[int(key)] = val
with
用于处理文件清理。当您离开该块时(无论是通过常规执行流还是通过异常),该文件都会自动关闭。您可以在此处阅读有关Python上下文管理器的更多信息:effbot.org/zone/python-with-statement.htm
for line in open("file.txt"):
以相同的方式进行清理。如果f是局部值,f
则在失去作用域时将释放该值。该语句唯一有用的情况是长函数(质量不好)或使用全局变量。
for line in open('file.txt')
并没有做清理工作方式相同。并非所有的Python实现都是相同的。 with
保证退出该块时文件将关闭。当for
线齐全,close
可以被调用。 CPython
会的,但是像这样的版本IronPython
具有懒惰的垃圾收集器。
这会将密钥保留为字符串:
with open('infile.txt') as f:
d = dict(x.rstrip().split(None, 1) for x in f)
dict([line.split() for line in f])
的就够了,imo。
dict([x.rstrip().split(None, 1) for x in f])
代替dict(x.rstrip().split(None, 1) for x in f)
。对于那些想法相同的人,前者是生成器表达式,而不是列表解释,如此处所述:python.org/dev/peps/pep-0289(PEP-289)。学到新东西!
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)
partition
呢?和with
声明?
partition
更快,并且正是为此目的而创建的。
with
是确保它是一种简单的方法。
strip
我会说,这仍然需要。
通过字典理解
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]
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)
re
?认真吗?
split()
如果文件格式不是健全的,则几乎不能静默地工作。
这是另一个选择
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:]