0

我需要编写一个从文件中读取的函数,并将每一行作为一个单元格放入列表中。我需要将 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:

######
#    #
# #@ #
# $* #
# .* #
#    #
######
4

3 回答 3

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 != '']

或者

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]
于 2012-12-18T20:19:08.467 回答
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")

您可以使用以下命令构建第 N 个单元的输出cell_output = '\n'.join(cell[n-1])

print '\n'.join(cells[0])从上方打印您的“输出单元格 1”

于 2012-12-18T20:19:13.477 回答
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']]
于 2012-12-18T20:38:54.157 回答