前の回答はメソッドの明確なステートメントを示しましたが、おそらく文字列処理またはcsv処理のいずれかで立ち往生しています。両方とも次のコードで示されています。関連する文字列メソッドはとsortedですjoin。 結合されたアイテム間の区切り文字として使用するように'/'.join指示します。リスト内の演算子とステートメントの間の演算子は、リストを連結します。Aは、行ごとに1つのリストを配信するイテレーターであり、はリストを行に変換して書き出します。ファイルを開くなどにエラーテストを追加する必要があります。このコードのテストに使用されるデータファイルは、コードの後に表示されます。join/+tnamewriterowcsv.readercsv.writer
import csv
fi = open('xgroup.csv')
fo = open('xgroup3.csv', 'w')
w = csv.writer(fo)
r = csv.reader(fi)
li = 0
print "Opened reader and writer"
for row in r:
gname = '/'.join(row[1:])
sname = '/'.join(sorted(row[1:]))
tname = '/'.join([row[1]]+sorted(row[2:]))
w.writerow([row[0], gname, sname, tname]+row[1:])
li += 1
fi.close()
fo.close()
print "Closed reader and writer after",li,"lines"
次にファイルxgroup.csvを示します。
unique-ID,person_1,person,_2,person_3,person_4,...,person_20
12,Tom,Sally,Mike
16,Joe,Mike
5,Joe,Sally
1,Sally,Mike,Tom
6,Sally,Tom,Mike
2,Jared,Joe,Mike,John,...,Carl
上記のようにデータを読み取ると、プログラムは次に示すようにファイルに出力を出力して生成しOpened reader and writerます。Closed reader and writer after 7 linesxgroup3.csv
unique-ID,person_1/person/_2/person_3/person_4/.../person_20,.../_2/person/person_1/person_20/person_3/person_4,person_1/.../_2/person/person_20/person_3/person_4,person_1,person,_2,person_3,person_4,...,person_20
12,Tom/Sally/Mike,Mike/Sally/Tom,Tom/Mike/Sally,Tom,Sally,Mike
16,Joe/Mike,Joe/Mike,Joe/Mike,Joe,Mike
5,Joe/Sally,Joe/Sally,Joe/Sally,Joe,Sally
1,Sally/Mike/Tom,Mike/Sally/Tom,Sally/Mike/Tom,Sally,Mike,Tom
6,Sally/Tom/Mike,Mike/Sally/Tom,Sally/Mike/Tom,Sally,Tom,Mike
2,Jared/Joe/Mike/John/.../Carl,.../Carl/Jared/Joe/John/Mike,Jared/.../Carl/Joe/John/Mike,Jared,Joe,Mike,John,...,Carl
次のようなデータ行があることに注意してください
5,Joe,Sally,,,,,
それ以外の
5,Joe,Sally
上記のプログラムは
5,Joe/Sally/////,/////Joe/Sally,Joe//////Sally,Joe,Sally,,,,,
それ以外の
5,Joe/Sally,Joe/Sally,Joe/Sally,Joe,Sally
それが問題である場合は、空のエントリを除外します。たとえば、の場合
row=['5', 'Joe', 'Sally', '', '', '', '', '']、は、を
'/'.join(row[1:])生成し
'Joe/Sally/////'、一方
'/'.join(filter(lambda x: x, row[1:]))、
'/'.join(x for x in row[1:] if x)およびはを
'/'.join(filter(len, row[1:]))生成し
'Joe/Sally'ます。