2017-06-30 5 views
1

私は、ファイルを開くモジュールを開始、それを読み、いくつかのものを行い、それに追加しています。しかし、私はまずファイルに何が入っているのかを見極めようとしています。プログラムの開始は次のとおりです。なぜ印刷機能はopen_withに動作していませんか?

def addSkill(company): 
    with open("companies.txt", "a+") as companies: 
     for line in companies: 
      print('ok') 
      print(line.rstrip('\n')) 
     companies.write(company + '\r\n') 

    companies.close() 

いずれの印刷機能も動作していません。文書にテキストがあります。そして、要求に応じてそれを追加します。助言がありますか?

+6

を更新するために、ディスクファイルを開く 'A' 、カーソルはファイルの最後に位置します。 –

+0

@ウィレム・ヴァン・オンセム(Willem Van Onsem) –

+0

私は間違っているかもしれませんが、私は+のためにそれを読んで、カーソルが最初に置かれていると読んだと思っていましたか?別々の作業をせずに読み込んだり追加したりする効率的な方法はありますか? –

答えて

2

は、ちょうどその時、それは自動的に最後に書き込むなり、思い出にあなたが必要なすべてを保存し'r+'を使用して開きます。あなたのファイル記述子が最後にあるためです。自動的にファイルディスクリプタが最後に置か'a'でファイルを開く

は、したがって、あなたはその前に書かれたものを見ることができません。

例えば

def addSkill(company): 
    with open('companies.txt', 'r+') as fd: 
     list_of_companies = fd.readlines() 
     fd.write(company + '\n') 

list_of_companies.append(company) # adding the last company to the full list. 
print('\n'.join(list_of_companies)) # print each company with a '\n'. 

ボーナス:あなたのclose()方法はwithを使用して役に立たない、Pythonがあなたのためにそれを行うだろう。

いずれにしても

、あなたが機能のオプションについて不明な点がある、してくださいRTFM: open()

  • 'r'読み取るためのオープン(デフォルト)
  • 'w'書き込み用にオープン、ファイル最初
  • 'x'を切り捨てます排他的に作成するために開いています。ファイルがすでに存在する場合は失敗します。
  • 'a'ファイルが存在する場合はファイルの末尾に追加して書き込みます。
  • 'b'バイナリモード
  • 't'テキストモード(デフォルト)
  • '+'(非推奨)(読み取りと書き込み)
  • 'U'ユニバーサル改行モードあなたが使用
関連する問題