如何将文本文件转换为字典并打印?

时间:2015-06-17 20:20:58

标签: python python-3.x dictionary

我的文件格式化为三列数字:

2    12345    1.12345
1    54321    1.54321
3    12345    1.12345

我想让Python使用前两列作为键,并使用第三列作为值。文件很大,这意味着我无法手动格式化。那么如何让Python自动将我的大文件转换为字典?

这是我的代码:

with open ('file name.txt' 'r') as f:
    rows = ( line.split('\t') for line in f ) 
    d = { row[0]:row[:3] for row in rows}
    print(d)

输出会在整个地方对角打印数字。如何正确格式化?

4 个答案:

答案 0 :(得分:0)

你应该试试 -

import pprint
d = {}
with open ('file name.txt','r') as f:
    for line in f:
        row = line.split('\t')
        if len(row) == 3:
            d[(row[0], row[1])] = row[2]
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(d)

答案 1 :(得分:0)

香蕉,你很亲密。

  1. 您需要用逗号分隔open
  2. 的参数
  3. 您想指定row的第三个成员,即row[2]
  4. 您需要决定如何将行的前两个成员分组为可哈希的密钥。从中创建一个元组,即(row[0],row[1])可以工作。
  5. 逐行打印字典。
  6. 尝试:

    with open('filename.txt','r') as f:
        rows = ( line.split('\t') for line in f ) 
        d = { (row[0],row[1]):row[2] for row in rows}
    for key in d.keys():
        print key,d[key]    
    

答案 2 :(得分:0)

首先,您的切片是错误的。您可以使用 var regex = new Regex("[E](((\\d{1,2})))[-][E]?(\\d{1,2})"); var substrings = regex.Split("S03E01-E03"); 获得第一个拖链列,使用line[:2]获得第三个拖链列。

此外,您不需要在单独的数据结构中创建行,您可以在map中使用解包操作和dict comprehension函数:

line[2]

结果:

with open ('ex.txt') as f:
      d={tuple(i):j.strip() for *i,j in map(lambda line:line.split('\t'),f)}

print(d) 

请注意,由于{('2', '12345'): '1.12345', ('3', '12345'): '1.12345', ('1', '54321'): '1.54321'} 是列表而列表是不可用的对象,因此您无法将其用作词典键,因此您可以将其转换为*i

如果您想保留订单,可以使用collections.OrderedDict

tuple

答案 3 :(得分:0)

我不确定你想要键的布局方式。无论如何,您应该使用csv模块,使用'\t'作为分隔符。

import csv

with open('data.txt') as file:
    tsvfile = csv.reader(file, delimiter='\t')
    d = { "{},{}".format(row[0], row[1]): row[2] for row in tsvfile }
    print(d)

打印出来:     {'3,12345':'1.12345','1,54321':'1.54321','2,12345':'1.12345'}

或者,你有这个:

with open('data.txt') as file:
    tsvfile = csv.reader(file, delimiter='\t')
    d = {}
    for row in tsvfile:
        d[row[0]] = row[2]
        d[row[1]] = row[2]
    print(d)

打印出来:

{'54321': '1.54321', '3': '1.12345', '1': '1.54321', '12345': '1.12345', '2': '1.12345'}