0

私はプレーンテキストファイルを持っています:

    2 jordyt
    2 dawder
    2 LOL12345
    2 2251084185
    2 123456789
    2 123456
    1 warcraft
    1 tripp88

python's csvmoduleを介して解析した後、私は持っています:

with open(filename,'r') as csvfile:
    reader = csv.reader(csvfile,delimiter=' ')
    for row in reader:
        print row

['', '', '', '', '', '', '2', 'jordyt']
['', '', '', '', '', '', '2', 'dawder']
['', '', '', '', '', '', '2', 'LOL12345']
['', '', '', '', '', '', '2', '2251084185']
['', '', '', '', '', '', '2', '123456789']
['', '', '', '', '', '', '2', '123456']
['', '', '', '', '', '', '1', 'warcraft']
['', '', '', '', '', '', '1', 'tripp88']

編集1:

次のような出力が期待されます。

['2', 'jordyt']
['2', 'dawder']
['2', 'LOL12345']
.
.
.

カスタムプリプロセッサでこの問題を修正できます。しかし、それらのファイルは非常に大きく、2 回読み取るのはよくありません。

私の質問は次のとおりです。解析する前にcsvモジュールに行を削除するように指示するにはどうすればよいですか?

4

3 に答える 3

5

1 つのオプションは、skipinitialspaceパラメーターを提供することです。

with open(filename,'r') as csvfile:
    reader = csv.reader(csvfile,delimiter=' ',skipinitialspace=True)
    for row in reader:
        print row
于 2013-01-15T18:42:44.670 に答える
4

区切り文字がスペースの場合、CSVモジュールを使用しないように誘惑されます(スペースを含む引用符で囲まれたフィールドがないことがわかっている場合)。

これは、連続する区切り文字の性質split()またはsplit(None)処理をうまく利用します。

with open(filename,'r') as csvfile:
    for row in csvfile:
        print row.split()

または、それを処理してCSVモジュールを使用する必要がある場合は、入力ファイル上にジェネレーターを作成し、それをリーダーに渡します):

with open(filename,'r') as csvfile:
    stripped = (row.strip() for row in csvfile)
    reader = csv.reader(stripped,delimiter=' ')
    for row in reader:
        print row
于 2013-01-15T18:38:16.087 に答える
1

split() はあなたが望むことをするので、この場合の csv の使用に疑問があります。

with open(filename, 'r') as csvfile:
    for row in csvfile:
        words = row.split()
        print words

プリント(データ用):

['2', 'jordyt']
['2', 'dawder']
['2', 'LOL12345']
['2', '2251084185']
['2', '123456789']
['2', '123456']
['1', 'warcraft']
['1', 'tripp88']
于 2013-01-15T18:47:33.683 に答える