1

組み込みの python csv ライターに、配列内の特定の文字列値を無視させたいとしましょう (出力のコンマ間に値を配置しません)。例えば、

my_list = [4, 'foo', 'close', 9, 0]

csv output => 4, ,'close', 9, 0

ライターが無視するように指定するパラメーター「foo」を提供しますが、これは可能ですか? もしそうなら、誰かが実装を手伝ってもらえますか?

4

4 に答える 4

2

書き込む行の 2D リストがある場合、次のようなことができます。

lines = [[4, 'foo', 'close', 9, 0], [5, 'foo', 'close', 9, 0]]

import csv
with open("outfile.csv", "wb") as outf:
    w = csv.writer(outf)
    for line in lines:
        w.writerow(["" if e == "foo" else e for e in line])
于 2012-07-30T12:39:46.450 に答える
1
>>> import csv
>>> my_list = [4, 'foo', 'close', 9, 0]
>>> with open('test.csv', 'w') as fout:
        w = csv.writer(fout, delimiter=',')
        w.writerow([x if x != 'foo' else ' ' for x in my_list])

>>> print open('test.csv').read()
4, ,close,9,0
于 2012-07-30T12:39:28.480 に答える
0

これを試すことができます:

ignored_strings = {'foo', 'ignored2', 'ignored3'}

my_list_filtered = [value if value not in ignored_strings else '' for value in my_list]

これにより、無視する各値が空の文字列に置き換えられます。その後、csv ライターを使用して新しいリストを印刷できます。

出力をどのように見せたいかに応じて、リスト内包表記の最後に「if」ステートメントを使用して、不要な値をリストから単純に削除することもできます。

于 2012-07-30T12:38:46.673 に答える
0

次のようなものを使用して、リスト内で置換を行うことができます。

map(lambda x : str(x) if x != 'foo' else ' ', my_list)

join出力文字列を作成するには、次のようにします。

','.join(map(lambda x : str(x) if x != 'foo' else ' ', my_list))
于 2012-07-30T12:38:10.567 に答える