Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで複数の入力ストリームからの行を反復処理します


Pythonの組み込みのopen() 関数は、1つのファイルを読み取り/書き込みモードで開き、そのファイルに対する読み取り/書き込み操作を行います。バッチで複数のファイルの処理を実行するには、 fileinputを使用する必要があります Pythonの標準ライブラリのモジュール。このモジュールは、ファイルを反復処理する機能を備えたFileinputクラスを提供します。このモジュールでは、同じ目的のヘルパー関数も定義されています。

このモジュールへの主要なインターフェースはinput() 働き。この関数は、Fileinputクラスのインスタンスを返します。

fileinput.input(files, inplace, mode)

filesパラメーターは、1つずつ読み取る1つ以上のファイルの名前です。各ファイルはジェネレーターとして機能し、forループを使用して繰り返すことができます。ファイルの各行はPythonコンソールに出力されます。

>>> for line in fileinput.input('data.txt'):
print (line)

filesパラメーターは、多数のファイルで構成されるタプルにすることができます。ファイルの内容が1つずつ表示されます。

>>> for line in fileinput.input(files=('a.txt', 'b.txt')):
print (line)

Fileinputクラスは、withステートメントでコンテキストマネージャーとして使用することもできます。

>>> with fileinput.input(files=('a.txt', 'b.txt')) as f:
for line in f:
print (line)

fileinputモジュールには、次の関数が定義されています。

機能と説明
Sr.No。
1 filename()
現在読み取られているファイルの名前を返します。
2 fileno()
ファイル記述子の整数を返します。
3 lineno()
読み取られるファイルの行番号を返します。数は累積カウントです。
4 filelineno()
現在のファイルの行番号のみを返します。
5 isfirstline()
現在のファイルの最初の行が読み取られている場合はtrueを返し、それ以外の場合はfalseを返します。

次のステートメントは、ファイル内の各行を行番号とともに出力します

>>> for line in fileinput.input('books.py'):
print ('{}->{}'.format(fileinput.filelineno(), line))

上記のコードの出力例は

です。
1->import sqlite3
2->conn = sqlite3.connect('c:/python36/books.db')
3->cursor = conn.cursor()
4->cursor.execute("SELECT * from books;")
5->print(cursor.fetchall())

次のコードは、フォルダ内の各ファイル名に続いて番号付きの行を出力します。このプログラムでは、glob()関数を使用して、現在のパスにあるファイルのリストを、オプションで一致するワイルドカードとともに返します。ここで、glob(‘*。py’)は、現在のフォルダ内の.py拡張子を持つすべてのファイルのリストを返します。このリストは、fileinput.input()関数のファイルパラメータとして使用されます。

import fileinput, glob, sys
for line in fileinput.input(glob.glob("*.py")):
if fileinput.isfirstline():
print (fileinput.filename(),'>')
sys.stdout.write ("{}.{}".format(fileinput.filelineno(),line))

isfirstline()関数の使用に注意してください。新しいファイルの反復が開始されると、この関数はtrueを返し、fileinput.filename()関数によって返されたファイル名が最初に出力され、次に番号付きの行が表示されます。例

1.py >
1.a = 10
2.b = 20
3.print ('addition=',a+b)
hello.py >
1.x = 10
2.y = 20
3.z = x+y
4.print ("x+y=",z)

インプレースパラメータ

デフォルトでは、fileinput.input()関数のinplace=Falseです。 Trueに設定すると、入力ファイルが書き込み可能になります。

次のテキストを含む「msg.txt」があると仮定します。

Hello Python. Good morning

次のコードは、fileinputモジュールを使用してファイルを開き、その内容を適切に変更します。

>>> for line in fileinput.input(files='msg.txt',inplace = True):
line = line.replace('morning', 'evening')
sys.stdout.write(line)

「msg.txt」には、行われた変更が表示されます。


  1. PythonPandas-DataFrameから複数の行を選択する方法

    DataFrameから複数の行を選択するには、:演算子を使用して範囲を設定します。最初に、エイリアス-を使用してrequirepandasライブラリをインポートします import pandas as pd 次に、新しいPandasDataFrameを作成します- dataFrame = pd.DataFrame([[10, 15], [20, 25], [30, 35], [40, 45]],index=['w', 'x', 'y', 'z'],columns=['a', 'b']) :演算子

  2. Python tkinterキャンバスから行を削除するにはどうすればよいですか?

    Canvasウィジェットには、GUIアプリケーション開発における多くのユースケースがあります。 Canvasウィジェットを使用して、図形を描画したり、グラフィックや画像などを作成したりできます。 Canvasで線を引くには、 create_line(x、y、x1、y1、** options ) 方法。 Tkinterでは、単純な線と破線の2種類の線を描くことができます。 作成した行をアプリケーションで削除する場合は、 delete()を使用できます。 メソッド。 例 Canvasウィジェットで定義された行を削除する例を見てみましょう。 # Import the required libr