首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文件中读取特定的单词和值,并将它们存储在字典中

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

Stack Overflow用户
提问于 2015-04-12 19:26:02
回答 1查看 119关注 0票数 0

我想从具有这种格式的文件中读取:

胡扯 胡言乱语 更胡言乱语 胡言乱语(总共约10行垃圾) 1姓3 9,50 22 38 2姓中间名1 6,50 22 38 38

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

dict ={ 1:'lastname',‘6.50’,'9,50',2:'lastname',‘6.50’,'6.50'}

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

代码语言:javascript
复制
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

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

一个姓姓三..。

2姓名中间名2.

3姓、名、中名、下名、名、名.

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

dict ={ 1:'lastname',‘dict’,9.5,2:'lastname',‘dict’,6.5}

那么,有什么想法可以让我的代码像我所希望的那样工作呢?

编辑:胡言乱语并不完全是胡言乱语,它可以是其他名字或数字,只是那些我不想提取的名字或数字。用正则表达式进行搜索对我来说不是个好主意。例如,对于此文件:

约翰 约翰·史密斯 1 9.56 (共约10行垃圾) 1约翰史密斯3 9,50 22 38 38雅各布史密斯 2约翰史密斯雅各布1 6,50 22 38

我认为正则表达式将返回文件中的所有名称,而我只想要在这里显示的名字。我所寻找的单词是独特的,更多的是因为它们在文件中的位置,而不是某种模式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-12 19:37:34

首先:

  1. 创建一个循环,在其中读取和处理每一行。
  2. 在该循环中,如果它与您想要的格式匹配,则在该循环中进行评估。正则表达式(Regex)可用于此。
  3. 如果上述情况为真,则获取其数据。我在这里也会用到正则表达式。
  4. 必要的话把它清理干净。

Regex不太容易,但非常强大。我认为这是唯一能控制住这里的东西的方法。如果需要的话,你可以单独问一些问题。例如,以下模式将工作并匹配您想要的每一行(您甚至不需要跳过前10行),尽管您需要做更多的工作才能将数据输出出来:

代码语言:javascript
复制
r'^\d(\s[a-zA-Z])+'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29593664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档