新的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
我需要一種方法來從文本文件中找到'值',以供進一步使用。值可以是幾乎任何東西 - 只要它們是數字。
如果你只有一個淡水河谷用空格(空白字符,準確地說)分隔:
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])
如果在一個文件中環線上線,請嘗試:
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
這是拼圖的碎片,這是不是很難把那些一起...
拆分部分是什麼我失蹤了。謝謝! – Kaapo
使用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"))
當然,日期可以從1.1開始。到31.12。 – Kaapo
通過此http://docs.python.org/2/tutorial/inputoutput.html – avasal
http://mattgemmell.com/2008/12/08/what-have-you-tried/ – zenpoy