0

重複の ID チェックのリストを取得し、ID のリストを書き込む使い捨てコードを書きました。私が取り組んでいることのほんの一部に過ぎません..

この奇妙な出力が得られます。デリミタが本来あるべきではない場所にスペースを追加しているように見えます。区切り文字は単語または行の間だけですか? 非常に混乱。

r s 9 3 6 4 5 5 4
r s 9 3 1 1 1 7 1 
r s 7 8 9 0 2 0 2 5 
r s 7 6 5 2 3 3 1 
r s 7 2 1 0 4 8 
r s 6 9 8 3 2 6 7 
r s 6 4 6 5 6 5 7
r s 6 2 9 2 4 2 
r s 6 1 9 9 1 1 5 6

コード:

__author__ = 'prumac'
import csv

allsnps = []

def open_file():
    ifile  = open('mirnaduplicates.csv', "rb")
    print "open file"
    return csv.reader(ifile)

def write_file():
    with open('mirnaduplicatesremoved.csv', 'w') as fp:
        a = csv.writer(fp, delimiter=' ')
        a.writerows(allsnps)


def checksnp(name):
    if name in allsnps:
        pass
    else:
        allsnps.append(name)

def mymain():
    reader = open_file()
    for r in reader:
        checksnp(r[0])
    print len(allsnps)
    print allsnps
    write_file()

mymain()
4

1 に答える 1

3

.writerows()リストのリストが必要です。代わりに、文字列のリストを渡しており、これらは一連の文字として扱われます。

各文字列をタプルまたはリストに入れます。

a.writerows([val] for val in allsnps)

これをすべてもう少し効率的に行うことができることに注意してください。

with open('mirnaduplicates.csv', "rb") as ifile, \
     open('mirnaduplicatesremoved.csv', 'wb') as fp:
    reader = csv.reader(ifile)
    writer = csv.writer(fp, delimiter=' ')

    seen = set()
    seen_add = seen.add
    writer.writerows(row for row in reader if row[0] not in seen and not seen_add(row[0]))
于 2013-05-20T22:23:56.963 に答える