[解決済み] Pythonです。ラムダ関数に1つだけ変数を渡すには?
質問
私のコードは、テキストファイルを一行ずつ読み込んでいます。各行は空白文字1文字に切り取られ、それがパターンにマッチするかどうかに基づいて、matched_data_file または unmatched_data_file のいずれかに書き込まれます。この例では、ラムダを使用しなければなりません。私はエラーが次の行にあると思うが、私は100%の確信を持っていない。
success(line=row) if pattern.match(line) else failure(line=row)
どんな助けでも大歓迎です、ありがとうございます。
以下のエラーメッセージが表示されます。
トレースバック (最も最近の呼び出し): ファイル "model_dev_txt_to_csv.py", 26行目、in process(source_filename) ファイル "model_dev_txt_to_csv.py", line 23, in process process_line(行, lambda: write_csv(m, 行), lambda: write_csv(u, 行)) ファイル "model_dev_txt_to_csv.py"、行 12、in プロセス_ライン return success(line=row) if pattern.match(line) else failure(line=row) TypeError: () は予期しないキーワードを受け取りました。 引数 'line'
以下は私の現在のコードです。
import re
import csv
pattern = re.compile("([0-9]+) +([0-9\.-]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+) +([0-9\.\-+Ee]+)")
source_filename = "track_param_hist.txt"
matched_data_file = "good_hist_csv.csv"
unmatched_data_file = "bad_hist_csv.csv"
def process_line(line, success, failure):
# Make sure all whitespace is reduced to one space character
row = (' '.join(line.split())).split(' ')
success(line=row) if pattern.match(line) else failure(line=row)
def write_csv(file, line):
csv.writer(file).writerow(line)
def process(source):
print("Script for splitting text file into two separate csvs...")
with open(matched_data_file, 'w') as m:
with open(unmatched_data_file, 'w') as u:
with open(source) as f:
for line in f:
process_line(line, lambda: write_csv(m, line), lambda: write_csv(u, line))
if __name__ == "__main__":
process(source_filename)
解決方法は?
ラムダ式の 構文 をPythonで表現すると、次のようになります。
lambda [list of arguments]: <expression>
あなたのコードでは、ラムダに対する引数が定義されていません。という名前の引数を追加する必要があります。
line
の前に
:
を使用することで、コードを動作させることができます。
lambda line: write_csv(m, line), lambda line: write_csv(u, line)
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] 変数を参照渡しする方法を教えてください。
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] 環境変数の値にアクセスする方法
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonで文字列を小文字にするには?
最新
-
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 string splicing.join()とsplitting.split()の説明
-
Python Decorator 練習問題
-
Python カメの描画コマンドとその例
-
PythonはWordの読み書きの変更操作を実装している
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
[解決済み】socket.error: [Errno 48] アドレスはすでに使用中です。
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】Python: OverflowError: 数学の範囲エラー