使用每一行从文本文件创建字典

时间:2015-12-04 07:55:15

标签: python python-2.7 exception dictionary

我的.txt文件如下所示:

 1 2
 3 4
 5 6
 7
 a 8
 9 10

我需要检查一行上的两个值是否为整数,如果它们不是它会给出错误并继续。

然后使用左侧的值作为键将值更改为字典,将右侧的值更改为值,但仅当两个值都是整数时才会更改。

如果它们不是两个整数,并且密钥已经存在,我必须添加一个值。如果密钥不存在,我会添加一个值和一个密钥。

在所有这些之前,我需要使用原始输入打开文本文件,如果插入了无效输入则会出错。 (我得到了这部分工作)

这是我到目前为止所做的:

while True:
    try:
        fileName=raw_input('File name:')
        File2=open(fileName,'r+')
        break
    except IOError:
        print 'Please enter valid file name!'

for line in File2:
    if line==int:
        continue
else:
    print 'This line does not contain a valid Key and Value'

myDict = {}
for line in File2:
    line = line.split()
    if not line:  
        continue
    myDict[line[0]] = line[1:]
    print line

1 个答案:

答案 0 :(得分:2)

以下内容有望让您更进一步。当文件中的值不是整数时,您不清楚要做什么。下面显示了您可以添加此内容的位置:

import os

myDict = {}

while True:
    fileName = raw_input('File name: ')
    if os.path.isfile(fileName):
        break
    else:
        print 'Please enter valid file name!'

with open(fileName, 'r') as f_input:
    for line_number, line in enumerate(f_input, start=1):
        cols = line.split()
        if len(cols) == 2:
            try:
                v1 = int(cols[0])
                v2 = int(cols[1])
                myDict[v1] = v2
            except ValueError, e:
                print "Line {} does not use integers - {}, {}".format(line_number, cols[0], cols[1])
                # If they're not both integers, and key is already present I have to add a value
                # <Add that here>
        else:
            print "Line {} does not contain 2 entries".format(line_number)

print myDict

因此,对于您的示例文件,这将为您提供以下类型的输出:

File name: x
Please enter valid file name!
File name: input.txt
Line 4 does not contain 2 entries
Line 5 does not use integers - a, 8
{1: 2, 3: 4, 5: 6, 9: 10}

我建议您使用Python的with命令。这会自动为您关闭文件。