从文本文件中提取数据

时间:2012-12-03 17:31:23

标签: python string text-processing

Python新手,有一个非常基本的问题:

我有一个文本文件,其格式如下例所示(第一个数字是日期,第二个是与之相关的值):

4.12. -11
5.12. 24
6.12. 192
7.12. -34
8.12. 921

我需要一种从文本文件中找到“值”的方法,以供进一步使用。这些值几乎可以是任何东西 - 只要它们是数字。

3 个答案:

答案 0 :(得分:2)

要在文件中逐行循环,请尝试:

with open('filename') as fin:
    for line in fin:
        print line

然后,这是从字符串中获取值的示例:

>>> s = '4.12. -11'
>>> s.rsplit(' ', 1)
['4.12.', '-11'] # two elements

然后是索引:

value = s.rsplit(' ', 1)[1]
# '-11'

但是这会产生一个字符串,所以这里转换为一个整数:

myval = int(value)
# -11

那是拼图的碎片,把它们放在一起并不困难......

答案 1 :(得分:1)

如果您只有一个以空格数分隔的值(确切地说是空白字符):

data = {}

with open('filename') as f:
    for line in f:
        row = line.split()
        data[row[0]] = row[1]

假设:第一列中的键是唯一的。

现在您可以访问data[value]来获取值,例如:

>>> print data['8.12.']
921

如果每个键/日期可以有多个值,那么:

from collections import defaultdict

data = defaultdict(list)

with open('filename') as f:
    for line in f:
        row = line.split()
        data[row[0]].append(row[1])

现在数据将是一个字典,值将是文件中找到的所有值的列表。因此对于文件:

1.1. 10
2.1. 11
1.1. 12

data['1.1']将为["10", "12"]

您可能需要将字符串转换添加到数字以完全符合您的要求:

data[row[0]] = int(row[1])

或:

data[row[0]] = float(row[1])

答案 2 :(得分:0)

使用regular expressions可以帮助您入门......

#!/usr/bin/env python

import re
lines = ["4.12. -11",
    "5.12. 24",
    "6.12. 192",
    "7.12. -34",
    "8.12. 921"]

regexp=re.compile("^(?P<day>\d+)\.(?P<month>\d+)\.\s+(?P<val>-*\d+(\.\d+)*)")

if __name__ == "__main__":
    for line in lines:
        matcher = regexp.match(line)
        if regexp.match(line):
            print "%s-%s:%s" % (matcher.group("day"), matcher.group("month"), matcher.group("val"))