2015-10-02 64 views
0

我有一個腳本,我已經寫了下載數據,並對其進行了排序。然後它需要把它放到一個mysql數據庫中。在文件中的Python循環

從文件讀取數據並將其插入到字典中時出現問題。而不是讀取前12行,並將它們輸入到DB(它是12列的寬,因此每列有1行)

它正在循環。因此,我不是每個人都需要讀取12個數據組中的數據,並進行處理。或者,也許有另一種方式我沒有想到任何人都可以幫助我。

的data.txt

A : 34 
B : 234 
C : DFG 
D : SG 
E : 452435 
F : 4 
G : 34554 
H : foo 
I : bar 
J : 41234 
K : lkjdfg 
L : 134243 

腳本

d = {} 
with open("data.txt") as f: 
    for line in f: 
     (key, val) = line.split(": ") 
     Id[key.strip()] = val.strip() 

     print(d.get("A")) 
     print(d.get('B')) 
     print(d.get('C')) 
     print(d.get('D')) 
     print(d.get('E')) 
     print(d.get('F')) 
     print(d.get('G')) 
     print(d.get('H')) 
     print(d.get('I')) 
     print(d.get('J')) 
     print(d.get('K')) 
     print(d.get('L')) 

params = d.get('A'), d.get('B'), d.get('C'), d.get('D'), d.get('E'), d.get('F'), d.get('G'), d.get('H'), d.get('I'), d.get('J'), d.get('K'), d.get('L') 

我是新來的蟒蛇,並想出來的,我去。所以如果這件事很明顯,請原諒我。

+0

請編輯您的代碼 – Pynchia

+0

'd'總是一個空字典。由於密鑰從未定義過,您總是會得到'None'。你從來沒有創建過'Id',所以會導致NameError。可能這不是你正在運行的代碼?你的文本文件是否包含多於12行? – dsh

+0

是的,它包含大約2200行 – d3vild0g

回答

0

使用

params = d.values() 

,而不是

params = d.get('A'), d.get('B'), d.get('C'), d.get('D'), d.get('E'), d.get('F'), d.get('G'), d.get('H'), d.get('I'), d.get('J'), d.get('K'), d.get('L') 

,將讓你值

['134243', '34554', '4', 'lkjdfg', '234', '452435', 'bar', 'SG', 'foo', 'DFG', '41234', '34'] 

還清單,也沒有必要在括號(鍵,VAL) =分割

0

你在找f或類似...

def process(f): 
    for i in range(0, len(f), 12): # count by 12s 
     params = f[0+i:12+i] 
     # do something with params 

with open("data.txt") as f: 
    process(f) 
0

itertools has a recipe for reading an iterable in chunks of fixed size。好消息是,Python文件是可迭代的。

import itertools 

def grouper(iterable, n, fillvalue=None): 
    "Collect data into fixed-length chunks or blocks" 
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx 
    args = [iter(iterable)] * n 
    return itertools.izip_longest(fillvalue=fillvalue, *args) 


def chunkreader(f, n): 
    chunks = grouper(f, n, "") 
    for chunk in chunks: 
     yield(line.strip() for line in chunk) 


def process(chunk): 
    d = {} 
    for line in chunk: 
     if line: 
      k, v = line.split(":") 
      d[k] = v 
    insert_in_db(d) 

def insert_in_db(d): 
    # mock 
    print d 

with open("test.txt") as f: 
    for chunk in chunkreader(f, 12): 
     process(chunk)