我想从具有以下格式的文件中读取:
胡言乱语
胡言乱语
更具讽刺意味
胡言乱语(总共大约10行垃圾)
姓氏3 9,50 22 38 38吉伯利什语吉伯利什语
2姓氏名中名1 6,50 22 38 38吉伯利什吉伯利什吉伯利什吉伯利什
我想要的是用粗体值填充字典,键是这样的行的第一个数字:
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

它基本上做了我想要它做的事情,但是它严重依赖于文件是一种特定的格式,并且不能很好地将名字和中间名连接在一个字符串中,除非它们是这样绑定的:名字中间名。事情是在第一个数字和下一个数字之间的那一行只有名字:
1姓氏名3…
2姓氏名字中间名2…
3姓氏fisrtname中间名nextname更多姓名姓名1。。。
另外,如何将每个列表中的最后一个值设为浮点数即“9,50”->9.5,并使字典如下:
dict={1:['lastname','firstname',9.5],2:['lastname','firstname middlename',6.5]}
那么,有什么办法让我的代码像我希望的那样工作吗?
编辑:这种胡言乱语并不完全是胡言乱语,它可以是其他名字或数字,只是那些我不想提取的名字或数字。用正则表达式搜索对我来说不是个好主意。例如,对于此文件:
厕所
约翰·史密斯
1个
9.56(共约10行垃圾)
约翰·史密斯3 9,50 22 38 38雅各布·史密斯约翰
约翰·史密斯·雅各布1 6,50 22 38彼得·杰克·约翰
我想一个正则表达式会返回给我文件中的所有名字,而我只想要我在这里加粗的名字。我所寻找的单词之所以独特,更多的是因为它们在文件中的位置,而不是某种模式。

最佳答案

对于初学者:
创建一个循环,在其中读取和处理每一行。
如果与所需格式匹配,则在该循环中求值正则表达式(Regex)可用于此。
如果上述情况属实,请获取数据。我在这里也会用到正则表达式。
必要时清理干净。
正则表达式不太容易,但非常强大。我认为这是唯一能让你掌控一切的方法如果需要的话,你可以单独提问。例如,下面的模式可以工作并匹配您想要的每一行(您甚至不需要跳过前10行),尽管您需要做更多的工作来获取数据:

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

10-07 19:10
查看更多