2012-04-26 5 views
1

今、私は以下のコードといくつかのtxtファイル内の段落テキストを解析:複数行csvを出力するには?

def ParseFile(path,filename): 


    content=open(path+filename).read() 
    code=filename.split('.')[0] 

    pattenstart = '' 
    pattenend = '' 


    for catlog in CATLOG: 

     i = content.index(pattenstart) 
     j = content.index(pattenend) 

     info=content[i:j] 

     yield (catlog,code,info) 
     sys.stdout.write('.') 

と情報が複数行のテキスト

ある今私が出力するようなcsvファイルたい:

code info 
***  **** 
     **** 
     **** 
***  **** 
     **** 
     **** 

と私はテストするために、いくつかのスクリプトを使用しますが、唯一のアウトのようなファイルを置くことができます。

code info 
***  **** 
*********** 
********** 

と私のテストスクリプトは:

time1=time.time() 

subfix='_ALL.csv' 
d = defaultdict(list) 
for path in [PATH1,PATH2]: 
    print 'Parsing',path 
    filenames = os.listdir(path) 
    for filename in filenames: 
     print 'Parsing',filename 
     for item in ParseFile(path,filename): 
      d[item[0]].append((item[1],item[2])) 
     print 

for k in d.keys(): 
    out_file=open(DESTFILEPATH+k+subfix,'w') 
    for code,info in sorted(set(d[k])): 
     out_file.write(code+'\t'+info+\n') 
    out_file.close() 
print 'Done in %0.1f seconds'%(time.time()-time1) 

どのように修正するのですか?

+4

'csv'モジュールを使用します。 – ch3ka

答えて

2

Pythonはthe csv moduleを持っていますので、もっと簡単にやりたいことをやり遂げることができます。

例:

生成
import csv 
with open('somefile.csv', 'w') as file: 
    output = csv.writer(file, delimiter='\t') 
    output.writerows([ 
     ['code', 'info'], 
     ['****', '****'], 
     [None, '****'], 
     [None, '****'], 
     [None, '****'], 
     ['****', '****'], 
     [None, '****'] 
    ]) 

code info 
**** **** 
     **** 
     **** 
     **** 
**** **** 
     **** 

編集:

をあなたのデータは、このために適切なフォーマットでない場合、あなたは単にそれを変更する必要がありますフィット:

import csv 
from itertools import izip_longest 
from itertools import chain 

data = [("key", ["value", "value"]), ("key", ["value", "value"])] 

with open('somefile.csv', 'w') as file: 
    output = csv.writer(file, dialect='excel-tab') 
    output.writerows(
     chain.from_iterable(
      izip_longest([key], values) for key, values in data 
     ) 
    ) 

生成するもの:

key  value 
     value 
key  value 
     value 
+0

私はすでにcsvモジュールを使用していますが、私が望む形式を出力することはできません。 – sword

+0

あなたは、あなたが与えたコードでファイルを書くために '' csv''モジュールを使用していないことを明言しています。 –

+0

私はそれが私が望む効果ではないと思う、私はデータベースにcsvファイルをインポートしたいので、コードと情報は同じ行になければならない。 – sword

関連する問題