-1

我有一个输入文件:

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()

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

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以便我可以进一步处理它们?

请建议

4

2 回答 2

1

我不知道我是否理解你想要的结果。我你想要一个列表列表。假设您希望板是:[[data,data,data],[data,data,data],[data,data,data]],那么您需要定义如何解析您的输入文件......特别是:

  • 第 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(boards) 获取计数:

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)
于 2013-04-13T03:52:56.577 回答
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()
于 2013-04-13T03:33:49.303 回答