Python新手,有一个非常基本的问题:
我有一个文本文件,其格式类似于以下示例(第一个数字是日期,第二个数字是与之相关的值):
4.12. -11
5.12. 24
6.12. 192
7.12. -34
8.12. 921
我需要一种从文本文件中找到“值”以供进一步使用的方法。这些值几乎可以是任何东西——只要它们是数字。
Python新手,有一个非常基本的问题:
我有一个文本文件,其格式类似于以下示例(第一个数字是日期,第二个数字是与之相关的值):
4.12. -11
5.12. 24
6.12. 192
7.12. -34
8.12. 921
我需要一种从文本文件中找到“值”以供进一步使用的方法。这些值几乎可以是任何东西——只要它们是数字。
要在文件中逐行循环,请尝试:
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
那是拼图的碎片,把它们放在一起并不难......
如果您只有一个由空格数分隔的值(准确地说是空格字符):
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])
使用正则表达式应该让你开始......
#!/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"))