2013-10-25 257 views
0

我有一個文本文件不是完全格式化的,但它具有指定的列。Python - CSV將文本文件中的數據提取到CSV文件中

Code   Description   Unit   Retail 
1000MADB90  Taupe 2X2   12X12   5.90 
1002MOPAS  Grey Stilato   12X12   12.09 

那麼一些垃圾,然後再

 Code   Description   Unit  Retail 
    1050QADD   Black 2X2   12X12   2.12 
    1002MOPAS  Red velvet   12X12   1.11 

我需要能夠有它在一個CSV文件,沒有垃圾之前和之後格式化。所以,我想保留列名和信息,直到它碰到垃圾並跳到以Code開頭的另一列。我已經嘗試了幾個(確切地說是12)在stackeroverflow上找到的示例,但似乎無法得到它,因爲它被格式化爲Excel(csv)。此外,文本文件中的列大小和對齊方式不同(不知道是否重要)

我不是程序員,但我正在尋找一種簡單的方法將目錄轉換爲在POS系統中輸入。我欣賞的幫助

+1

考慮使用熊貓,如果你的程序允許您添加這個包 – Boud

+0

OK,變化列的大小確實有點重要,是否有任何共同的模式,他們堅持?它總是「代碼描述單位零售」,然後像'1000MADB90 Taupe 2X2 12X12 5.90'下面的東西? –

+0

是的,總是代碼說明單位零售和其他列,我不感興趣..然後有用的數據然後垃圾..然後它再次啓動與代碼說明單位零售..感謝您的幫助 – weemo

回答

1

一個簡單的方法來做到這一點(只要你知道一個簡單的方法來識別垃圾):

with open('originalfile.csv','r') as f: 
    with open('newfile.csv','w') as new_file: 
    for row in f: 
     if not is_junk(row): 
     new_file.write(row) 


def is_junk(row): 
    return not row.strip() or (not (("Retail" in row) or is_float(row.split()[-1]))) 

def is_float(str): 
    try: 
    float(str) 
    return True 
    except ValueError: 
    return False