0

毎日生成される約 30,000 行と 25 列の非常に大きな csv ファイルがあります。関心のある行のみが含まれるように、このファイルをフィルタリングする必要があります。形式は次のとおりです。

date, time, user, entity, party1, party2
20131001, 00:01, user1, ABC, XXX, XXX
20131002, 00:01, user2, XYZ/ABC, XXX, ABC
20131003, 00:01, user1, DEF, ABC, XXX

たとえば、entity=ABC を持つすべての行を削除する必要があります。どちらかを考えていました

  1. ファイルを読み込んで、ABC を含む各行を削除しますが、実際に必要な行が削除されます。削除するエンティティ列に ABC を含む行のみを削除したい。

  2. Python で csv モジュールを使用して、同じことを達成してみてください。csv で利用可能な関数を読みましたが、列ごとにフィールドで区切ることができるものは何も提供していないようです。

必ずしもコードで答えを探しているわけではありませんが、この問題を解決する方法に関する一般的なアドバイスは大歓迎です。

どうもありがとう。

4

2 に答える 2

1

csvあなたが示唆しているように、そして例えば @DhruvPathak が彼の答えで概説しているように、Pythonのモジュールであなたが望むことを確かに行うことができます(ここでawkはまだ良いです)が、1行のスクリプトでそれを行う方がはるかに簡単だと思います:

$ awk -F ', ' '{ if ($4 != "ABC") print; }' < file.txt
date, time, user, entity, party1, party2
20131002, 00:01, user2, XYZ/ABC, XXX, ABC
20131003, 00:01, user1, DEF, ABC, XXX

どこfile.txtにあなたのデータが含まれています。

于 2013-10-30T06:19:37.390 に答える
0
for mycsv_line in csv_reader:
    if mycsv_line[4] != "ABC" :
    #append to result
于 2013-10-30T06:12:02.757 に答える