2013-10-25 125 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