在Python中,如何使用;“文件”中的行的strip();格式?

在Python中,如何使用;“文件”中的行的strip();格式?,python,Python,请参阅下面的代码,我尝试使用两个不同的函数从文本文件(基本上是游戏板的保存文件)中读取不同的部分。第一个尝试读取前5行并将其分配到矩阵(列表列表)。第二个尝试读取第6行并将其分配给字符串。然而,我似乎无法让代码正常工作。有什么想法吗 def load_board(): with open("savefile.txt","r") as savefile: loadBoard = [line.strip().split(",") for line in savefile]

请参阅下面的代码,我尝试使用两个不同的函数从文本文件(基本上是游戏板的保存文件)中读取不同的部分。第一个尝试读取前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

在这两个函数中,您都在读取完整的文件。您需要阅读所有行,然后使用所需行,请参见以下示例:

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

savefile
与代码中一样,是一个文件实例,而不是行列表。相反,对所有行使用
savefile.readlines()
。而且

loadBoard = [line.strip().split(",") for line in savefile.readlines()]

会给你全部6行,而不仅仅是5行。所以
loadBoard[-1]
将是
[M]

为什么不加载一次文件,然后使用输出解析出所需内容

def load_save(保存文件名):
打开(将文件名“r”另存为保存文件时:
返回save_file.read().split('\n')#返回保存文件中所有行的列表
def加载板(保存行):
为保存行[:5]]中的行返回[line.strip().split(',')#不包括最后一行(边线)
def加载侧(保存行):
返回[save_lines[5:][.strip()]#仅为最后一行
可以这样使用:

save\u line=load\u save('savefile.txt'))
线路板=加载线路板(保存线路)
侧=加载侧(保存线)
您也可以通过文件对象

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

def load_side():
    with open("savefile.txt","r") as savefile:
        loadBoard = [line.strip() for i, line in enumerate(savefile) if i==5]  #only 6th ( index starts at 0 )
        loadSide = loadBoard.pop()
        return loadSide

print(load_board())
print(load_side())

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

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_board
load_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")

两者的输出是什么?您是否收到任何错误消息?编辑:我在
load\u save
中缺少了调用
read()
的括号。itertools做了什么?在您看到它时什么都没有:)编辑最终利用了它。
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")