从文件中读取特定的单词和值并将它们存储在字典中

时间:2015-04-12 19:26:02

标签: python algorithm dictionary file-io

我想从具有以下格式的文件中读取:

  

乱搞

     

ssome gibberish

     

更加giberish

     

乱码(总共约10行垃圾)

     

1姓氏名字 3 9,50 22 38 38 giberish dibberish giberish

     

2姓氏名字中间名 1 6,50 22 38 38 giberish giberish gibberish

我想要的是使用粗体值填充字典,其中键是该行的第一个数字,如下所示:

dict = {1:['lastname','firstname','9,50'],2:['lastname','firstname middlename','6.50']}

到目前为止,我已经做到了:

list=[0,0,0]
dict={}

def process(line):
    words = line.split()
    list[0] = words[1]
    list[1] = words[2]
    list[2] = words[4]
    dict[int(words[0])] = list  

with open('fisierIntrare.txt') as file:
    for i in xrange(10):
        file.next()
    for line in file:
        process(line)
        list=[0,0,0]        


print dict

它基本上做了我想要它做的事情,但是它严重依赖于文件是某种格式,并且不能很好地将名字和中间名连接在一个字符串中,它们就像这样绑定:firstname-middlename 。事情在第一个数字和下一个数字之间,只有名称:

1姓氏名字3 ...

2 lastname firstname middlename 2 ...

3 lastname fisrtname middlename nextname morename namename 1 ...

另外,如何将每个列表中的最后一个值设为浮点数?即'9,50' - > 9.5并制作如下字典:

dict = {1:['lastname','firstname',9.5],2:['lastname','firstname middlename',6.5]}

那么,任何想让我的代码像我想要的那样工作的想法呢?

编辑:乱码不完全是胡言乱语,它可以是其他名称或数字,只是我不想提取的。通过正则表达式搜索对我来说听起来不是一个好主意。例如,对于此文件:

  

约翰

     

John Smith

     

1

     

9.56(总共约10行垃圾)

     

1 John Smith 3 9,50 22 38 38 Jacob Smith John

     

2 John Smith Jacob 1 6,50 22 38 38 Peter Jack John

我认为正则表达式将返回给我文件中的所有名称,而我只想要我在这里加粗的名称。我寻求的词语在文件中的定位比在某种模式中更独特。

1 个答案:

答案 0 :(得分:0)

首先:

  1. 创建一个循环,读取并处理每一行。
  2. 如果匹配您想要的格式,则在该循环中进行评估。正则表达式(正则表达式)可用于此。
  3. 如果以上情况属实,请获取相关数据。我也在这里使用正则表达式。
  4. 如有必要,请进行清理。
  5. 正则表达式不是太容易,但非常强大。我认为这是让你掌控的东西得到控制的唯一途径。如果需要,您可以就此提出单独的问题。例如,以下模式可以使用并匹配您想要的每一行(您甚至不需要跳过前10行),尽管您需要做更多的工作来获取数据他们:

    r'^\d(\s[a-zA-Z])+'