2011-01-13 22 views
0

よろしくお願い致します。25mb .txtファイルをテキスト区切り文字を使用して小さなファイルに分割する

私はpythonとPerlの新機能です。私は簡単な問題を解決し、構文を使って結び目をつけようとしています。誰かが時間と忍耐を持って助けてくれることを願っています。 私は、1970年に戻ってくるニュースワイヤー記事を含む ".​​txt"形式の25MBのファイルを持っています。それぞれのニュース記事は、区切る "著作権"ステートメントだけで次のものに連結されます。各ニュースは、「XXXの文書XX」で始まります。何度も繰り返される特定のメタデータがあります。後でタグ付けするためにこれらを使用します。

は、私は、別の.txtファイルにそれぞれ含む1件のニュース記事を、この25メガバイトのファイルを分割したい(つまり、明らかに別の名前()でそれぞれを保存する「ドキュメント」と「著作権」、間のテキスト。

I 1)ファイルをオープンしようとしています... 2)ファイル内の行を繰り返してeofデリミタをチェックし、リストに行を書いていない場合は3)リストを別々の小さなファイルに書き出します。

私はカウンタを使用してファイル名を変更することに大きな問題があります。また、私が中止したところからPythonを始める方法を教えてください。

これまでのところ、私は完全に失敗し、このアプローチをしようとしている:

myfile = open ("myfile.txt", 'r') 
filenumber = 0 
for line in myfile.readline(): 
    filenumber += 1  
    w=0 
    while myfile.readline() != '\s+DOCUMENTS\s*\n' 
    ### read my line into a list 
    mysmallfile()['w'] = [myfile.readline()] 
    w += 1 
    output = open('C:\\Users\\dunner7\\Documents\###how do I change the filename  each  iteration???', 'w') 
    output.writelines(mysmallfile) 
    ###go back to start. 

はあなたの時間と忍耐をありがとうございました。ここRD

は、テキストファイルのサンプルです:

      1 of 575 DOCUMENTS 

         The Washington Daybook 

          January 28, 2011 

保健社会福祉省(HHS)。食品医薬品局(FDA) (FR Page 72832)は、 医療機器諮問委員会の神経装置パネルの会議を開催し、 について、電気ショック療法で使用することが示された機器の再分類可能性について議論し、勧告する-28。

TIME:午前8時

LOCATION:ヒルトンワシントンDCノース/ゲーサーズバーグ、ボールルーム、620ペリーパークウェイ、 メリーランド州ゲイサーズバーグ

CONTACT:ジェームズEngles、800-741-8138 [注:使用コード:3014512513、 が情報を求めて]

LOAD-DATE:2010年11月28日

言語:英語

TYPE:会議

 Copyright 2011 Federal Information and News Dispatch, Inc. 


          2 of 575 DOCUMENTS 

         The Washington Daybook 

          January 27, 2011 

保健社会福祉省(HHS)。食品医薬品局(FDA) (FR Page 72832)は、 医療機器諮問委員会の神経装置パネルの会議を開催し、 について、電気ショック療法で使用することが示された機器の再分類可能性について議論し、勧告する-28。

TIME:午前8時

LOCATION:ヒルトンワシントンDCノース/ゲーサーズバーグ、ボールルーム、620ペリーパークウェイ、 メリーランド州ゲイサーズバーグ

CONTACT:ジェームズEngles、800-741-8138 [注:使用コード:3014512513、 が情報を求めて]

LOAD-DATE:2010年11月28日

言語:英語

TYPE:会議

 Copyright 2011 Federal Information and News Dispatch, Inc. 


          3 of 575 DOCUMENTS 


           FNS DAYBOOK 

         January 12, 2011 Wednesday 
           FUTURE EVENTS 

EVENT:MEETING - 保健社会福祉省(HHS)。食品および飲料 管理(FDA)(F.R.ページ72832); LOCATION:ヒルトンワシントンDCノース/ゲーサーズバーグ、ボールルーム、620ペリーパークウェイ、 メリーランド州ゲイサーズバーグ - 2011年1月27日午前8時

SECTION:連邦政府機関や部門 - FUTURES

LENGTH:72言葉:

件名:保健福祉局(HHS);食物および薬物 投与(FDA)(FR Page 72832)は、 の電気痙攣治療に使用される可能性のあるデバイスの再分類に関する の可能性のある勧告について議論し、勧告するために、医療機器諮問委員会のデバイスパネル-28。

CONTACT:ジェームズEngles、800-741-8138 [注:コードを使用します。 は、情報を要求したときに、3014512513]を

LOAD-DATE:2011年1月10日

言語:英語

出版物-TYPE:イベントスケジュール

    Copyright 2011 Federal News Service 
          All Rights Reserved 
+2

ファイルのスニペットを提供できますか? – nosklo

答えて

1

そのような何か:

filenumber = 0 
outfile = None 
with open('source_file.txt') as f: 
    for line in f: 
     if line.strip() == 'DOCUMENTS': 
      filenumber += 1 
      outfile = open('result%03d.txt' % filenumber, 'w') 
     elif line.strip().startswith('Copyright') and outfile: 
      outfile.close() 
      outfile = None 
     elif outfile: 
      outfile.write(line) 
if outfile: 
    outfile.close() 

ファイルがどのように見えるかわからないので、私はたくさんのことを推測しなければなりませんでした。さらに問題がある場合は、ファイルを投稿してください。道に沿って

+0

あなたはすべて美しい人です。試してくれてありがとう。私は通常、答えを探して投稿するのではなく、Pythonの本で深く掘り下げていますが、足を伸ばすだけです。試してくれてありがとう。これはあまり働いていません(しかしどちらも誤りではありません)。ファイルは以下のようになります: – rosser

+0

@ user574141:ちょっとしたファイルのスニペットを入力してください – nosklo

1

いくつかの問題:

  • 小さなファイルに書き込むときは、ループイテレータの両方でmyfile.readline()を使用している - あなたは、現在の内容を知りたいときだけlineを使用行
  • ビットは常に失敗しますが、これは実際には正規表現の一致ではありません。
  • mysmallfile()['w']は、mysmallfile()関数を使用して 'w'でインデックスされた配列または辞書を返してL値(!))あなたがコースからちょうど道を離れているのと同じように:)
  • ファイルを開いてそのファイルに行を書きますが、決してファイルを閉じません。これは、オープンファイル記述子を使い果たしたときに1000行後に失敗するレシピです。

noskloの提案には多くのクリーンアップがあります。私の投稿は、彼が彼にどのようになったのか理解するのを助けることができますように願っています。 :)

+0

ポイント3:ええと、それはちょうど 'mysmallfile = ...'が必要だと思います。 ファイル記述子:私はPythonのガベージコレクタが閉じると思います問題に遭遇する前に古いファイルハンドルをオフにしてください。しかし、それらを閉じても良い習慣です。 –

+0

Wow;)オープンなファイルを閉じるためのフレンドリーな小さな言語。 :) – sarnold

関連する問題