我需要编写一个从文件中读取的函数,并将每一行作为列表中的一个单元格。 我需要复制1到2之间的行和从2到最后的行,并将它们中的每一行放在列表中的不同单元格中,而不包含包含数字和空行的行。 我不知道如何让它发挥作用。
文件:
; 1
####
# .#
# ###
#*@ #
# $ #
# ###
####
; 2
######
# #
# #@ #
# $* #
# .* #
# #
######
我的代码:
def loader(filename):
levels=[[]]
f=open(filename, "r")
x=[]
for line in f:
if ";" not in line:
x.append(line)
else:
levels.append(x)
f.close()
return levels
输出: 单元格1:
####
# .#
# ###
#*@ #
# $ #
# ###
####
单元格2:
######
# #
# #@ #
# $* #
# .* #
# #
######
答案 0 :(得分:3)
最终的最佳解决方案:
如果您使用re
,则可以从
; 1
到
; 2
以下是代码:
import re
levels = [x[2:].strip() for x in re.split(';\s*\d', open(filename).read()) if x != '']
更早:(补偿数字,完全消除空白行)
levels = [x[2:].strip() for x in open(filename).read().split(';') if x != '']
OR
levels = [x[1:].strip() for x in open(filename).read().split('; ') if x.strip() != '']
打印输出:
for level in levels:
print level
或单独:
print levels[0]
print levels[1]
答案 1 :(得分:2)
试一试:
def loader(filename):
levels,x = [],[]
for line in open(filename,'r'):
line = line.strip('\n').strip()
# Skip blank lines
if line == '':
continue
# Assuming that lines containing ';' mark a new cell, so save the old cell
if ';' in line:
if x != []:
levels.append(x)
x = []
# If the line doesn't contain ';', it is part of the current cell
else:
x.append(line)
# Save the last cell, if there was one
if x != []:
levels.append(x)
return levels
cells = loader("testfile")
您可以使用cell_output = '\n'.join(cell[n-1])
:
print '\n'.join(cells[0])
打印上面的“输出单元格1”
答案 2 :(得分:2)
from itertools import groupby as gb
with open(file,'r') as f:
[list(g) for k,g in gb(f.readlines(),lambda x:';'in x or x=='\n') if not k]
输出:
[[u'####\n',
u'# .#\n',
u'# ###\n',
u'#*@ #\n',
u'# $ #\n',
u'# ###\n',
u'####\n'],
[u'######\n',
u'# #\n',
u'# #@ #\n',
u'# $* #\n',
u'# .* #\n',
u'# #\n',
u'######\n']]