2

import fileinputUbuntuボックスで実行されているPythonスクリプトで 使用しています。

私はコマンドラインでスクリプトを実行しており、その行に沿って、行を反復処理するために使用してpython myscript.py firstinputfile.txt secondinputfile.txtいる内部に何かがあります。私が遭遇している問題は、どちらもMacintosh()の行末を使用しており、行区切り文字として 認識されていないように見えることです。myscript.pyfor line in fileinput.input()firstinputfile.txtsecondinputfile.txt\rfileinput.input()\r

行区切り文字としてfileinput認識させる方法はありますか?\r

前処理firstinputfile.txtと行末のsecondinputfile.txt使用を検討しまし\nたが、2つの理由で躊躇しています:i)管理するために追加のファイルを出力したくない、ii)入力をfileinputファイル引数から取得したい(stdin配管後ではない)コマンド)を使用できるようにfileinput.filename()fileinput.filelineno()ます。

助言がありますか?

4

1 に答える 1

3

fileinput.input()がオプションのopenhookパラメーターをサポートしていることがわかりました。

openhook パラメータを介して fileinput.input() または FileInput() に開始フックを提供することで、ファイルを開く方法を制御できます。フックは、ファイル名とモードの 2 つの引数を取り、それに応じて開かれたファイルのようなオブジェクトを返す関数でなければなりません。このモジュールでは、2 つの便利なフックが既に提供されています。

さらに、普遍的な改行サポートrUドキュメントは、次のモードで Windows/Unix/Macintosh の改行をサポートするためにファイルを開くことができることを示唆しています。

モード 'U' または 'rU' でファイルを開くと、ユニバーサル改行モードで読み取るファイルが開きます。3 つの行末規則はすべて、read() や readline() などのさまざまなファイル メソッドによって返される文字列で "\n" に変換されます。

openhookしたがって、ユニバーサル改行をサポートする方法でファイルを開く引数として渡す小さな関数を作成できます。

def univ_file_read(name, mode):
    # WARNING: ignores mode argument passed to this function
    return open(name, 'rU')

次に、代わりに:

for line in fileinput.input():

使用する:

for line in fileinput.input(openhook=univ_file_read):

これは私にとってはうまくいったようで、\r現在は行区切りとして認識されています。

于 2012-12-13T09:39:10.717 に答える