Python - line.split()

时间:2013-01-16 04:23:35

标签: python split

嗨所以我刚刚开始编程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()使其返回所有值线?

谢谢!

5 个答案:

答案 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")
  • raw_input会在尝试继续之前等待用户输入,我假设你在这里试图“暂停”。你有什么应该工作。

现在已经说过......这应该能得到你想要的东西..

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(),此处actualLevel10

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,而不是行本身。