如何在Python中将文件中的特定行添加到List中?

时间:2013-04-13 03:19:33

标签: python list readline

我有一个输入文件:

3
PPP
TTT
QPQ

TQT
QTT
PQP

QQQ
TXT
PRP

我想阅读此文件并将这些案例分组到正确的boards。 要阅读Count(电路板编号),我有代码:

board = []
count =''    
def readcount():
        fp = open("input.txt")
        for i, line in enumerate(fp):
            if i == 0:
                count = int(line)
                break
        fp.close()

但我不知道如何将这些块解析为List:

TQT
QTT
PQP

我尝试使用

def readboard():
    fp = open('input.txt')
    for c in (1, count): # To Run loop to total no. of boards available
        for k in (c+1, c+3): #To group the boards into board[]
            board[c].append(fp.readlines)

但它错误的方式。我知道List的基础知识,但在这里我无法解析文件。

这些电路板位于第2至4行,第6至第8行,依此类推。如何让他们进入Lists? 我想将这些解析为CountBoards,以便我可以进一步处理它们?

请建议

2 个答案:

答案 0 :(得分:1)

我不知道我是否理解你想要的结果。我你想要一份清单。 假设你想要董事会: [[数据,数据,数据],[数据,数据,数据],[数据,数据,数据]],然后您需要定义如何解析输入文件...具体来说:

  • 第1行是计数
  • 每行输入数据
  • 板由空白区隔开。

如果是这种情况,则应正确解析文件:

board = []
count = 0 
currentBoard = 0 

fp = open('input.txt')
for i,line in enumerate(fp.readlines()):
    if i == 0:
        count = int(i)
        board.append([])
    else:
        if len(line[:-1]) == 0:
            currentBoard += 1
            board.append([])
        else: #this has board data
            board[currentBoard].append(line[:-1])
fp.close()
import pprint
pprint.pprint(board)

如果我的假设是错误的,那么可以对其进行修改以适应。 就个人而言,我会使用字典(或有序的字典)并从len(板)获取计数:

from collections import OrderedDict
currentBoard = 0
board = {}
board[currentBoard] = []

fp = open('input.txt')
lines = fp.readlines()
fp.close()

for line in lines[1:]:
    if len(line[:-1]) == 0:
        currentBoard += 1
        board[currentBoard] = []
    else:
        board[currentBoard].append(line[:-1])

count = len(board)
print(count)
import pprint
pprint.pprint(board)

答案 1 :(得分:0)

如果您只想获取特定的行号并将它们放入列表中:

line_nums = [3, 4, 5, 1]
fp = open('input.txt')
[line if i in line_nums for i, line in enumerate(fp)]
fp.close()