python - 在 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
解决方案
不要在每个函数中打开文件,而是将已经打开的文件作为参数:
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")
推荐阅读
- sequelize.js - sequelize 没有将关联的表数据作为对象返回
- css - Firefox 中滚动元素中的文本总是省略号
- angular - Angular 构建未正确编译 GitHub Actions
- c++ - 梯度不符合有限差分
- fortran - 重置(解除分配/无效)已损坏的 Fortran 可分配数组
- javascript - jQuery Ajax 自动在日期上添加时间戳
- uproot - uproot4可以写TTrees吗?
- angular - 使用 Input 装饰器将对象的特定属性传递给子组件
- javascript - 在页面加载时获取 safe-area-inset-bottom
- python-3.x - 无法将子包中的模块导入另一个子包