[英]Reading and taking specific file contents in a list in python
我有一个文件包含:
name: Sam
placing: 2
quote: I'll win.
name: Jamie
placing: 1
quote: Be the best.
我想通过python读取文件,并将特定内容附加到列表中。 我希望我的第一个列表包含:
rank = [['Sam', 2],['Jamie', 1]]
第二个列表包含:
quo = ['I'll win','Be the best']
首先,我开始通过以下方式读取文件:
def read_file():
filename = open("player.txt","r")
playerFile = filename
player = [] #first list
quo = [] #second list
for line in playerFile: #going through each line
line = line.strip().split(':') #strip new line
print(line) #checking purpose
player.append(line[1]) #index out of range
player.append(line[2])
quo.append(line[3])
我在第一个附录中得到的索引超出范围。 我已用':'分开,但似乎无法访问它。
当您执行line = line.strip()。split(':')时,当line =“ name:Sam”时,您会收到['name','Sam'],因此应先执行附加操作。
第二个player.append(line [2]将不起作用。
正如zython在评论中所说,您需要了解文件的格式以及文件中的每个空白行或其他更改,这会使脚本失败。
您应该对文件进行不同的分析:如果可以依靠“名称”和“引号”始终是每个播放器数据中现有字段的事实,则应查找此字段名称。
例如:
for line in file:
# Run on each line and insert to player list only the lines with "name" in it
if ("name" in line):
# Line with "name" was found - do what you need with it
player.append(line.split(":")[1])
一些问题,
for
循环的单次迭代中读取三行数据。 但这是行不通的,因为循环和split
命令在每次迭代中仅解析一行。 要从文件中读取一个条目,将需要进行三个循环迭代。 line
只有一个值,它是一个空字符串。 看到该行时,请忽略该行。 player
。 因此,您需要在上面声明该临时数组,首先使用name
字段填充,然后使用placing
字段填充,最后将其附加到player
。 list[0]
而不是list[1]
试试这个代码:
def read_file():
filename = open("player.txt", "r")
playerFile = filename
player = []
rank = []
quo = []
for line in playerFile:
value = line.strip().split(": ")
if "name" in line:
player.append(value[1])
if "placing" in line:
player.append(value[1])
if "quote" in line:
quo.append(value[1])
rank.append(player)
player = []
print(rank)
print(quo)
read_file()
我认为您对如何检查行并将行中的内容基于行包含的内容添加到两个列表感到困惑。 您可以使用in
来检查当前所在的行。 假设您的文本文件与问题文件相同,则此方法有效。
rank, quo = [], []
for line in playerFile:
splitted = line.split(": ")
if "name" in line:
name = splitted[1]
elif "placing" in line:
rank.append([name, splitted[1]])
elif "quote" in line:
quo.append(splitted[1])
print(rank) # [['Sam', '2'],['Jamie', '1']]
print(quo) # ["I'll win",'Be the best']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.