
with open("file.txt") as f:
for line in f:
for word in f:
if word == 'President':
print('a')
テキストファイル内に「大統領」という単語が4回あるのに、何も印刷されません。どうすればチェックできますか?
私のテキストファイルは次のようになります:
President Kacey Genicke
President Alexandra Twomey
President Aldous Graddell
President Bernie Jenicek
Officer Cyrill Vernazza
Officer Sutton Spier
Officer Isabella Seer
Officer Abbey Holdforth
Faculty Officer Lennie Lomaz
Faculty Officer Brant Howle
Faculty Officer Dionysus Summerbell
Faculty Officer Calhoun Duguid
Faculty Officer Tremain Arnaez
Faculty Officer Mirabella Trathan
Faculty Officer Dex Darcy
出力は次のようになります。
Kacey Genicke
Alexandra Twomey
Aldous Graddell
Bernie Jenicek
私はこれをやってみました:
with open("file.txt") as f:
for line in f:
if 'President' in line:
print(line[10])
これにより、各大統領の最初の文字がわかります。
答え1
内側のループfor word in f:
はない繰り返し「言葉」for line in f
1行で実行しますが、ファイルの行を消費するのと同じ動作をしますf
。
'President'
単語が行内に含まれているかどうかを確認するには、次の操作が必要です。
with open("file.txt") as f:
for line in f:
if 'President' in line:
print('a')
President
接頭辞を除いた単語で始まる行のみを印刷するには:
with open("file.txt") as f:
for line in f:
if line.startswith('President'):
print(line.replace('President', '').strip())
答え2
まず、インデントの問題だと思います。次のことを試してください。
with open('file.txt') as f:
count = 0
for line in f:
columns = line.split()
if len(columns) > 1 and 'President' in line:
print(columns[1], columns[2])
count += 1
print("There are ", count, "Presidents found")
特定の行に見つかった場合は、行全体を印刷する必要がありますPresident
。次に、行を列に分割し、それに応じて列を印刷します。
ただし、このような場合には、 を使用する方がawk
python よりもはるかに適切である可能性があります。
awk '/President/{c++; print $2,$3 } END { printf("There were %d Presidents found\n", c)}' file.txt
- 大統領を探す
- カウンターcを増分します。
- 2列目と3列目を印刷する
- 終了。見つかった出現回数の合計を出力します。