[英]How to print a specific line from a file
我正在尝试从“Scores”文件中打印一个特定的行,这是选项B.这是我的代码:
print("Option A: Show all scores\nOption B: Show a record\nOption Q: Quit")
decision = input("Enter A, B, C or Q: ")
myFile = open("Scores.txt", "rt")
if decision == "A":
record = myFile.read()
print(record)
myFile.close()
elif decision == "B" or decision == "b":
playerName = input("Enter a player name to view their scores: ")
record = myFile.read()
answer = record.find(playerName)
for line in answer:
print(line)
elif decision == "Q" or decision == "q":
exit
我选择了选项B,然后我输入了一个持有玩家得分的玩家名称,但它会抛出此错误消息:
line 12, in <module>
for line in answer():
TypeError: 'int' object is not callable
find()
方法如果成功则返回正索引,否则返回-1
您应该逐行循环内容,如下所示:
for line in myFile:
if line.find(playerName):
print(line)
我身边的几美分:
file = open("file")
lines = file.readlines()
for line in lines:
if playername in line:
print line
file.close()
希望它有效!
读取文件和查找数据的更安全的方法,以便在将整个文件存储在内存中时不会出现OutOfMemory问题。
playerName = input("Enter a player name to view their scores: ")
with open("Scores.txt", 'r') as f:
for row in f:
if playerName in row:
print row
你会使用这种方式with
将自行关闭文件或者程序结束或垃圾收集踢的时候,这样Python会逐行读取文件中的行和存储仅1中的存储器行。 所以你可以使用大文件而不用担心内存问题。
希望能帮助到你 :)
使用str
方法将需要更多的杂技。 试试以下,
import re
p = re.compile(r"\b{}\b".format(playername)) # keep it ready
# inside option B
for line in myfile: # no need to `.read()` it
match = p.search(line)
if match:
print(line)
break # if there is only one record for playername
看看它是否适合你。
类似的事情: 只读取特定的行(Python)
fp = open("file")
for i, line in enumerate(fp):
if line == playername:
print line
fp.close()
我还注意到你不会为每个决定关闭你的文件,应该做到这一点。
这里有很多答案,我的示例带来了一些python习语并对其进行了优化:
fname = "Scores.txt"
player_name = "Quido"
with open(fname) as f:
for line in f:
if player_name in line:
print line
break
print "Going on doing following tasks."
with
块将在退出内部块时关闭打开的文件。 无需f.close()
,在出现问题时可以安全地读取文件。
for line in f:
中的for line in f:
显示,在文本模式下迭代文件打开,我们每次迭代得到一行。
break
我们打印与玩家线后,将有效停止迭代在假设行,只有一个这样的行或者说我们很高兴与最前面的一个。 如果不是这种情况,删除break
允许打印包含播放器名称的所有行。
由于从文本文件迭代器返回的行包含新行,您可能更愿意删除它们。 在这种情况下使用print line.strip()
将从行的开头和结尾删除所有空白字符。
最终印刷证明,该程序在处理完所有生产线后继续进行。
可能会发生这样的情况,即您没有得到名称的输出,该输出似乎存在于文件中。 在这种情况下,您可能需要澄清信件案例。 例如,如果文本文件包含精确大小写中的所有名称,则必须正确输入名称。
其他选项是小写player_name并将其与较低的套线进行比较:
fname = "Scores.txt"
player_name = "Quido"
normalized_player_name = player_name.lower()
with open(fname) as f:
for line in f:
if normalized_player_name in line.lower():
print line.strip()
break # comment out to print all lines with the player
print "Going on doing following tasks."
注意,我们将player_name
外的player_name
规范化为更快一点。 循环内部的下套管可以工作,但会重复执行相同的任务。
该行使用文件中的精确字母大小写打印。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.