2016-04-11 8 views
-1

私は4つの異なる列を持つ巨大なファイルを持っています。列の1つに 'AB'、 'BC'、 'C​​A'などのコードがあります。私は各コードごとに別々のファイルを作成したいと思います。 4つのフィールドはすべて 'AB'のコードフィールドを持つfile_ABの例 私はこれに新しいですが、可能であれば、Pythonを使用したいと思います。 with open("C:/Users/Desktop/JesseData/fileread.txt") as f1: with open("C:/Users/Desktop/JesseData/fileout.txt") as f2: for line in f1: if fourth_attribute == 'CA': f2.write(line)ファイルの内容にコードごとに別々のファイルを書く - python

+1

のすべてを通してあなたのループは、なぜあなたはそれを試し、ポストを与えていないときは、簡単に正しいファイルに書き込むことができますこの方法では

d = {"AB": open("AB.txt", 'a'), "BC", ....} 

:私は、ファイルハンドルの辞書を保つことをお勧めしたいですいくつかのコード? – Francesco

答えて

0

私はあなたにこれを行うには、完全なコードを提供するつもりが、ここではスタートだいないよ:

ステップ1:あなたのファイルが巨大である場合

ファイルを読んで、あなたがお勧めしますそれを塊で読むこと。これを行うには、各チャンクで読んだ行の数を追跡し、そのイテレータが限界に達すると、そのデータを別のファイルにダンプします。次のようなものがあります。

with open("raw_data.txt", 'r') as f: 
    i = 0 
    data = [] 
    for line if f: 
     data.append(line) #do some formatting here 
     i += 1 
     if i >= THRESHOLD: 
      data_dump(data) 
      data = [] 
      i = 0 

この方法では、ファイル全体を一度に消去することはできません。

ステップ2:あなたのdata_dump機能でグループデータ

、あなたはグループにデータをお勧めします。これは、itertools.groupby()で最も簡単に実行できます。この関数は、反復可能キーとキーを受け取り、グループに分割された反復子を返します。あなたのデータがフォーマットされている場合、各行は、その行の値のリストである、そして、あなたのキーが最初のエントリであり、あなたのグループ分けは次のようになります。

groups = itertools.groupby(data, key = lambda x: x[0]) 

groupby()あなたがソートされたデータセットを期待し、そうすることを同じキー機能でデータをソートする必要があります。以下はgroupby

>>> lst = [[1, 2,3],[1,4,5],[2,45,65]] 
>>> import itertools 
>>> groups = itertools.groupby(lst, key = lambda x: x[0]) 
>>> 
>>> for g in groups: 
...  print g[0], list(g[1]) 
... 
1 [[1, 2, 3], [1, 4, 5]] 
2 [[2, 45, 65]] 

ステップ3の簡単な例である:データ

を書くあなたのデータがグループ化されたら、することができますだけのグループをループし、対応する出力ファイルにデータを追加。あなたのループ

+0

このような詳細な説明をいただきありがとうございます。私のファイルはリストではなく、 ";"で区切られた属性を含んでいます。ですから、デリミタを使ってグループ化する方法はありますか? – yatri

関連する問題