[解決済み】open withステートメントを使用してファイルを開く方法
質問内容
Pythonでファイルの入出力を行う方法について調べています。私は以下のコードを書きました。ファイルから名前のリスト(1行に1つ)を別のファイルに読み込み、ファイル内の名前と名前を照合し、ファイル内の出現箇所にテキストを追加します。このコードは動作します。もっといい方法はないでしょうか?
を使いたかったのですが
with open(...
ステートメントを入力ファイルと出力ファイルの両方に使用することができますが、それらが同じブロック内に存在することができませんので、名前を一時的な場所に保存する必要があります。
def filter(txt, oldfile, newfile):
'''\
Read a list of names from a file line by line into an output file.
If a line begins with a particular name, insert a string of text
after the name before appending the line to the output file.
'''
outfile = open(newfile, 'w')
with open(oldfile, 'r', encoding='utf-8') as infile:
for line in infile:
if line.startswith(txt):
line = line[0:len(txt)] + ' - Truly a great person!\n'
outfile.write(line)
outfile.close()
return # Do I gain anything by including this?
# input the name you want to check against
text = input('Please enter the name of a great person: ')
letsgo = filter(text,'Spanish', 'Spanish2')
解決方法は?
Pythonでは、複数の
open()
ステートメントを1つの
with
. カンマで区切るのですね。 そうすると、次のようなコードになります。
def filter(txt, oldfile, newfile):
'''\
Read a list of names from a file line by line into an output file.
If a line begins with a particular name, insert a string of text
after the name before appending the line to the output file.
'''
with open(newfile, 'w') as outfile, open(oldfile, 'r', encoding='utf-8') as infile:
for line in infile:
if line.startswith(txt):
line = line[0:len(txt)] + ' - Truly a great person!\n'
outfile.write(line)
# input the name you want to check against
text = input('Please enter the name of a great person: ')
letsgo = filter(text,'Spanish', 'Spanish2')
また、明示的に
return
を関数の末尾に追加します。 を使うことができます。
return
を使うと早く終了してしまいますが、あなたはそれを最後に持っていたので、それがないと関数が終了します。 (もちろん、値を返すような関数では、このように
return
で返す値を指定します)。
複数の
open()
という項目があります。
with
は Python 2.5 ではサポートされていませんでした。
with
文が導入された Python 2.6 ではサポートされていますが、Python 2.7 と Python 3.1 以降ではサポートされています。
http://docs.python.org/reference/compound_stmts.html#the-with-statement http://docs.python.org/release/3.1/reference/compound_stmts.html#the-with-statement
Python 2.5, 2.6, 3.0 で動作させる必要があるコードを書いている場合は、 ネストして
with
を使用するか、または、他の回答が示唆するように
contextlib.nested
.
関連
-
python string splicing.join()とsplitting.split()の説明
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonによるLeNetネットワークモデルの学習と予測
-
python string splicing.join()とsplitting.split()の説明
-
Python jiabaライブラリの使用方法について説明
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み] 'int'オブジェクトに'__getitem__'属性がない。
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み] スコーピングルールの簡単な説明?