2

ここで、以下のコードを使用して、いくつかの txt ファイルの段落テキストを解析します。

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

1 に答える 1

3

Pythonにcsvモジュールがあり、これを使用すると、必要なことをはるかに簡単に実行できます。ぜひご覧ください。

例えば:

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
于 2012-04-26T12:28:58.573 に答える