-2

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

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

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

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

4

3 回答 3

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

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

于 2012-12-03T17:40:24.887 回答
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])
于 2012-12-03T17:50:03.883 回答
0

使用正则表达式应该让你开始......

#!/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"))
于 2012-12-03T17:43:09.643 回答