2016-09-19 9 views
0

この問題の正確な質問は次のとおりです。 * 20行のテキストを含むファイルを作成し、 "lines.txt"という名前を付けます。これを "lines.txt"というファイルに読み込み、新しいファイル "numbered_lines.txt"に書き込むプログラムを作成します。このファイルには、各行の先頭に行番号が付いています。 例: 入力ファイル:「lines.txt」ファイルを読み込むPython 3.5でプログラムを作成し、最初のものと同じテキストを含む別のファイルを作成します。

Line one 
Line two 

予想される出力ファイル:

1 Line one 
2 Line two 

私はこだわっていますが、これは私がこれまで持っているものです。私はPythonの真の初心者です。私のインストラクターは物事をはっきりさせません。批判と助けに感謝します。

file_object=open("lines.txt",'r') 
for ln in file_object: 
    print(ln) 

count=1 
file_input=open("numbered_lines.txt",'w') 
for Line in file_object: 
    print(count,' Line',(str)) 
    count=+1 
file_object.close 
file_input.close 

私が出力するものは、.txtファイルです。私は行1〜20を記述しました。私は非常に立ち往生しており、正直なところ私がやっていることについてはほとんど考えていません。あなたはすべての権利の部分を持っている、とあなたはほとんどそこにいるあなたに

+0

あなたは決して 'file_input'を使用しません。 –

+0

ファイルの "書き込み"機能を調べてください。また、最後の2行はfile_object.close()とfile_input.close()でなければなりません。 – Checkmate

+0

あなたの返事をありがとう、私は本当に感謝し、それはトンを助けた! –

答えて

0

良い最初の試み、およびそれに、私はあなたのコードを通過し、あなたが右(か間違って)何をしたかを説明することができます

file_object=open("lines.txt",'r') 
for ln in file_object: 
    print(ln) 

一般的に、あなたがスペースを配置するが、これは、罰金です前後の割り当て(引数を分離する際、あなたがそうのようなことを書きたいと思うかもしれませんので、あなたは、 `、file_object) and add a space after aopenの結果を割り当てる:

file_object = open("lines.txt", 'r') 
for ln in file_object: 
    print(ln) 

しかし、このPOIでfile_objectの内部参照がファイルの最後に達しているので、同じオブジェクトを再利用したい場合は、0の先頭位置に戻るseekを戻す必要があります。あなたの割り当ては、ファイルに書いているだけで(画面ではなく)、ファイルから上記のループを削除する必要があります(しかし、私はあなたがしたいことを得ます。彼らが受け入れるものにかなり厳しい)。移動先:

これまでのところ、やや軽い書式設定の問題があります。 Pythonでは、通常、すべての変数の名前は小文字で、Capitalizationの名前は一般的にクラス名用に予約されています(ご希望の場合はread about them)。今すぐループに入ります

print(count,' Line',(str)) 

これはあなたの望むものではありません。 ' Line'は引用符で囲まれているため、文字列リテラルとして扱われるため、文字通りテキストとして扱われ、コードではありません。 Lineを割り当てていれば、引用符を取り出すことができます。最後の(str)は単に文字列オブジェクトを出力するだけで、間違いなくあなたが望むものではありません。また、印刷するfileを指定するのを忘れました。デフォルトでは画面に印刷されますが、開いてfile_inputに割り当てたnumbered_lines.txtファイルに印刷します。これを後で修正します。

count=+1 

あなたが異なっこれをフォーマットする場合は、countから+1を割り当てています。私はあなたがそれを増やすために+=演算子を使いたいと思っています。あなたのクイズ/テストでこれを覚えておいてください。最後に

:彼らは関数として呼び出されることを意味している

file_object.close 
file_input.close 

は、あなたが引数と最後に括弧を追加することによって、それらを起動する必要がありますが、closeが引数をとらないよう、括弧内の何も存在しません。すべてをまとめると、プログラムの完全な修正コードは次のようになります。

file_object = open("lines.txt", 'r') 
count = 1 
file_input = open("numbered_lines.txt", 'w') 
for line in file_object: 
    print(count, line, file=file_input) 
    count += 1 
file_object.close() 
file_input.close() 

プログラムを実行します。すべてのテキスト行の間に余分な空白行があることがわかります。これは、デフォルトではprint関数が新しい行endを追加するためです。ファイルから得た行に改行文字が含まれていたので、ここに行を追加する必要はありません。もちろん空の文字列に変更することはできます。その行は次のようになります。

print(count, line, file=file_input, end='') 

当然、他のPythonプログラマはPython的な方法があることを教えてくれますが、あなたはちょうど始めている、(それらについてはあまり心配しないでください、あなたは間違いなく、この後に拾うことができますが、私は非常に奨励しますあなたに!)

+0

深い助けをしてくれてありがとう、私は本当にそれが必要でした...これは愚かな質問かもしれませんが、最初にPythonを学ぶときに助けとなるガイドやビデオのあるウェブサイトを知っていますか? –

+0

外部リソースを質問すると、新しい質問として投稿されないための番号があります:[wikiエントリ](https://wiki.python.org/moin/BeginnersGuide/プログラマー)は、可能なすべてのリソースについて、[code academy](https://www.codecademy.com/lrn/python)は多少強烈かもしれませんが、包括的で、[learn python](http://www.learnpython .org /)もあなたのために働くかもしれません。あなたがもう少し挑戦しているなら、[pythonの難しい方法を学ぶ](https://learnpythonthehardway.org/)。 – metatoaster

1

ありがとう:

あなたは

for ln in file_object: 
    print(ln) 

を行うと、あなたがそのファイルの内容を使い果たしてきた、とあなたはされませんあなたが後でやってみるように、それらを再び読むことができる。

また、printあなたはこれがそのすべてを修正する必要がありfile_input.write(...)

をしたい、ファイルに書き込めません:

infile = open("lines.txt", 'r') 
outfile = open("numbered_lines.txt", 'w') 

line_number = 1 
for line in infile: 
    outfile.write(str(line_number) + " " + line) 

infile.close() 
outfile.close() 

しかし、ここでそれを行うには、より神託の方法です:

with open("lines.txt") as infile, open("numbered_lines.txt", 'w') as outfile: 
    for i, line in enumerate(infile, 1): 
     outfile.write("{} {}".format(i, line)) 
+0

['print'](https://docs.python.org/3/library/functions.html#print)は、実際にはPython 3のファイルに、' file'キーワード引数で書き込むことができます。 – metatoaster

+0

@metatoaster:私は訂正しました!それを指摘してくれてありがとう – inspectorG4dget

0

ファイルを開く正しい方法は、withステートメントを使用しています:

with open("lines.txt",'r') as file_object: 
    ... # do something 

このように、withによって導入されたコンテキストマネージャは、「何か」の最後または例外の場合にファイルを閉じます。

もちろん、あなたがそれに精通していない場合は、自分でファイルを閉じることができます。ないことcloseはメソッドです:章7.2を参照してください

file_object.close() 

:あなたが括弧を必要とし、それを呼び出すように。 Reading and Writing Files、公式文書に記載されています。

0
  1. 入力ファイルの内容を印刷しています。これは、2番目のループに到達するとファイルの内容が既に消費されたことを意味します。 (さらに、ファイルの内容の印刷を依頼していませんでした)

  2. 2番目のループでは、ファイルに書き込む代わりにprint()を使用しています。試してfile_input.write(str(count) + " " + Line)(そしてfile_inputは、と書かれたファイルの悪い名前のようです。を書きます。)

  3. count=+1は、+1、つまりの正の値に設定します。。代わりにcount += 1を意味すると思います。

  4. .close()の代わりに.closeを呼び出しています。かっこが重要です!

関連する問題