嗨所以我刚刚开始编程Python,所以请准备好了解很多问题。 首先,我正在创建一个小程序,它将从我以这种格式创建的.txt文件中获取信息:
10-50-100 11-78-245 12-123-354 等等......
如果用户想要获得以" 10"开头的行。我怎样才能得到它并返回所有信息(10,50和100)? 当我使用line.split()时,它只返回行的第一个条目...
这是我的代码:
levelChart = open("RunescapeLevelsChart.txt", "r")
actualLevel = raw_input("Level : ")
if actualLevel in open("RunescapeLevelsChart.txt").read() :
actualLevelSplit = actualLevel.split()
print actualLevelSplit
else :
print("Failed.")
raw_input("End")
如果我输入10.我希望程序返回10,50和100但它只返回我10.如何正确使用line.split()使其返回所有值线?
谢谢!
答案 0 :(得分:2)
从阅读你的帖子,我认为每组3个数字并不总是在不同的行上。而且你正在寻找以用户正在寻找的任何东西开始的每一套(例如10)。
浏览代码......
levelChart = open("RunescapeLevelsChart.txt", "r")
actualLevel = raw_input("Level : ")
到目前为止一切顺利。
if actualLevel in open("RunescapeLevelsChart.txt").read() :
此时,actualLevel是您的输入(例如'10')
open(“RunescapeLevelsChart.txt”)。read()将整个文本文件存储在内存中。
所以你要从整个文件中搜索“10”。从您的示例中,将评估为“真实”
actualLevelSplit = actualLevel.split()
print actualLevelSplit
split()按空格分割你的字符串。所以在这里,你将“10”分成['10'](列表)
else:
print("Failed.")
raw_input("End")
现在已经说过......这应该能得到你想要的东西..
levelChart = open("RunescapeLevelsChart.txt", "r")
actualLevel = raw_input("Level : ")
for line in levelchart: # Read the file line-by-line.
number_sets = line.split()
for set in number_sets:
if set.startswith(actualLevel + '-'):
print set
#>>> "10-50-100"
# Now you can further split each number into individual numbers
nums = set.split('-')
print nums
#>>> ['10', '50', '100']
# At this point, you can fetch the numbers from the list
levelChart.close() # Dont' forget to close the file object when you're done.
希望这有帮助。
答案 1 :(得分:0)
除此之外还有更多问题。
例如,如果输入23,则会找到此条目:12-123-354
如果您只想查找以10开头的内容,那么您希望以不同方式执行此操作。例如,如果您希望78
找不到第二个示例,那么您肯定需要做一些不同的事情。
答案 2 :(得分:0)
您在代码中的其他一些问题中打开了两次相同的文件。这是一个清理版本:
lines = []
with open("RunescapeLevelsChart.txt", "r") as the_file:
for line in the_file:
lines.append(line)
actualLevel = raw_input("Level : ")
for each_line in lines:
if actualLevel in each_line:
print each_line
else:
print "Didn't find it"
print "End"
答案 3 :(得分:0)
您的案例中的问题是
您正在actualLevel.split()
,此处actualLevel
是10
和actualLevel.split()
将仅返回10
In [23]: actualLevel = '10'
In [24]: actualLevel.split()
Out[24]: ['10']
在这里,您应该从文件中分割包含actualLevel的行
你应该做点什么In [28]: content = open("RunescapeLevelsChart.txt").read()
In [29]: y = [x for x in content.split(' ') if actualLevel in x]
In [30]: y
Out[30]: ['10-50-100']
In [31]: y[0].split('-')
Out[31]: ['10', '50', '100']
答案 4 :(得分:0)
将整个列表存储在文件中可能会更好:
f = open("RunescapeLevelsChart.txt", "r")
lines = f.readlines()
for i in lines:
if i.startswith(actualLevel + '-'): # so it's actually the first element
print i # this prints the line
print i.split('-') # use this is you want a list of the numbers
# rest of code (don't forget to close the file!)
您的代码返回第一个元素,因为您尝试拆分actualLevel
,而不是行本身。