我想从具有以下格式的文件中读取:
乱搞
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
我认为正则表达式将返回给我文件中的所有名称,而我只想要我在这里加粗的名称。我寻求的词语在文件中的定位比在某种模式中更独特。
答案 0 :(得分:0)
首先:
正则表达式不是太容易,但非常强大。我认为这是让你掌控的东西得到控制的唯一途径。如果需要,您可以就此提出单独的问题。例如,以下模式可以使用并匹配您想要的每一行(您甚至不需要跳过前10行),尽管您需要做更多的工作来获取数据他们:
r'^\d(\s[a-zA-Z])+'