2012-12-03 43 views
-2

新的Python中提取數據,並有一個非常基本的問題:從文本文件

我有一個文本文件,該文件格式,如下面的例子(第一個數字是日期,第二個是值的產生密切相關與它):

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

我需要一種方法來從文本文件中找到'值',以供進一步使用。值可以是幾乎任何東西 - 只要它們是數字。

+1

當然,日期可以從1.1開始。到31.12。 – Kaapo

+0

通過此http://docs.python.org/2/tutorial/inputoutput.html – avasal

+0

http://mattgemmell.com/2008/12/08/what-have-you-tried/ – zenpoy

回答

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

如果在一個文件中環線上線,請嘗試:

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 

這是拼圖的碎片,這是不是很難把那些一起...

+0

拆分部分是什麼我失蹤了。謝謝! – Kaapo

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"))