首页 > 解决方案 > 在 Python 中,如何使用“strip() for line in file”格式从文件中读取前 x 行?

问题描述

请参阅下面的代码,我尝试使用 2 个不同的函数从文本文件(本质上是游戏板的保存文件)中读取不同的部分。第一个尝试读取前 5 行并将它们分配给矩阵(列表列表)。第二个尝试读取第 6 行并将其分配给一个字符串。但是我似乎无法让代码工作。有任何想法吗?

def load_board():
    with open("savefile.txt","r") as savefile:
        loadBoard = [line.strip().split(",") for line in savefile]
        return loadBoard

def load_side():
    with open("savefile.txt","r") as savefile:
        loadBoard = [line.strip() for line in savefile]
        loadSide = loadBoard.pop()
        return loadSide

savefile.txt 看起来像这样:

R,R,R,M,R
R,R,R,R,-
R,R,M,R,R
R,R,R,R,R
M,R,R,R,R
M

标签: python

解决方案


不要在每个函数中打开文件,而是将已经打开的文件作为参数:

import itertools

# Pre-condition: the input is at the beginning of the file
def load_board(savefile):
    return [line.strip().split(",") for line in itertools.islice(savefile, 5)]


# Pre-condition: the first 5 lines have already been read
def load_side(savefile):
    return next(savefile).strip()

然后在调用每个函数之前打开文件一次。请注意,load_from_file应该使用它来确保load_boardload_side以正确的顺序调用,并且没有其他读取savefile来破坏先决条件。

def load_from_file(fname):
    with open(fname) as savefile:
        board = load_board(savefile)
        side = load_side(savefile)
    return board, side

loadBoard, loadSide = load_from_file("savefile.txt")

推荐阅读