从文件到列表复制行

时间:2012-12-18 20:04:19

标签: python

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

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

3 个答案:

答案 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])

为第N个单元格构建输出

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