with
まず、これが 2 日目のプログラミングである場合は、ステートメントとリストの内包表記を使用して、良いスタートを切ることができます。
他の人がすでに指摘しているよう[]
に、ing を含む変数でインデックス付けを使用しているため、それが配列であるかstr
のように扱わstr
れるため、指定したインデックスで文字が取得されます。
私はいくつかのことを指摘したいと思いました:
1)ファイルオブジェクトは反復可能なオブジェクトであるf.readline()
ため、ファイルを反復処理するために使用する必要はありません(で確認できるメソッドが定義されています。したがって、これを行うことができます:f
__iter__
getattr(f, '__iter__')
with open('accounts.txt') as f:
for l in f:
try:
(username, password) = l.strip().split(':')
print username
print password
except ValueError:
# ignore ValueError when encountering line that can't be
# split (such as blank lines).
pass
2) あなたはまた、「ファイルの最初の行だけを印刷する方法があるかどうか知りたいですか? または、その場合、2 番目、3 番目などを選択して印刷する方法はありますか?」と述べました。
パッケージのislice(iterable[, start], stop[, step])
関数は、itertools
たとえば、2行目と3行目だけを取得するのに最適です(インデックスは0から始まることに注意してください!!!):
from itertools import islice
start = 1; stop = 3
with open('accounts.txt') as f:
for l in islice(f, start, stop):
try:
(username, password) = l.strip().split(':')
print username
print password
except ValueError:
# ignore ValueError when encountering line that can't be
# split (such as blank lines).
pass
または、 1 行おきに取得するには:
from itertools import islice
start = 0; stop = None; step = 2
with open('accounts.txt') as f:
for l in islice(f, start, stop, step):
try:
(username, password) = l.strip().split(':')
print username
print password
except ValueError:
# ignore ValueError when encountering line that can't be
# split (such as blank lines).
pass
itertools (およびそのレシピ!!!)を学ぶことに時間を費やしてください。コードを簡素化します。