解析简单数组并将其保存在文件中

时间:2014-02-25 10:47:44

标签: python arrays

如果我有一个阵列:

stuff = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

如何以下列格式保存? 5个值+昏迷+其他5个值+昏迷等

12345, 678910, 1112131415

我尝试了什么,并没有给我所需的解决方案:

f = open('file.txt')
for item in stuff:
  for i in xrange(5):
      f.write("%s", item)
  f.write(", ")
f.close()

提前致谢。

5 个答案:

答案 0 :(得分:3)

尝试这种方式:

>>> s
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
>>> n
5
>>> [int(''.join(str(x) for x in s[i*n: i*n + n])) for i in range(len(s)/n)]
[12345, 678910, 1112131415]

只是一个没有完全测试代码的建议

编辑:要在文件中写入,请执行以下操作:

>>> L = [''.join(str(x) for x in s[i*n: i*n + n]) for i in range(len(s)/n)]
>>> with open("file", 'w') as f:
...  for v in L:
...   f.write(v + ', ')
... 

我在写入文件时没有转换为int。

更新:改进代码
对于损失少拆分任何长度的列表,你可以做天花板划分。我改进了代码,并在下面添加:

def split_list(L, n):
  """split successive n-sized groups from L as a list 
  """
  from math import ceil
  parts = int(ceil(len(L)/float(n))) # ceilng division 5/2 ==> 3
  return [int(''.join(str(_) for _ in L[i*n: i*n + n])) for i in range(parts)]

一些测试用例

# test cases
n = 5
s = [1, 2, 3 ]
print split_list(s, 5) # output [123]
s = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
print split_list(s, 5) # output [12345, 678910, 111213]
s = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
print split_list(s, 5) # output [12345, 678910, 1112131415]

答案 1 :(得分:1)

根据我的评论,这是一个丑陋的快速例子:

def chunks(l, n):
    """ Yield successive n-sized chunks from l.
    """
    for i in xrange(0, len(l), n):
        yield l[i:i+n]

with open('file.txt') as f:        
    f.write(', '.join([''.join((str(y) for y in x)) for x in chunks(stuff, 5)]))
@Grijesh Chauhan回答也不错

答案 2 :(得分:1)

最简单的方法,使用计数器

f = open("file.txt")
cnt = 0
for item in studff:
  f.write("%s", item)
  cnt = cnt + 1
  if cnt % 5 == 0:
    f.write(", ")
f.close()

答案 3 :(得分:1)

因为您的需求很简单。不需要拆分数组等。特别是当你需要迭代来编写它们时,使用enumreate。

这是一个打印到stdout的Python3代码,你可以轻松地为文件输出更改它。

for i, x in enumerate(stuff, 1):
    print(x, end="")
    if i % 5 == 0:
        print(",", end="")

答案 4 :(得分:1)

如果您还需要5个值之间的分隔符,请使用以下内容:

stuff = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
n = 5
main_separator = ','
secondary_separator = '-'
#secondary_separator = '-' # <- when you do not need a secondary separator between the values
result = main_separator.join([secondary_separator.join([str(i) for i in stuff[i*n: i*n + n]]) for i in xrange(len(stuff)/n)])
print result

这会产生以下输出

'1-2-3-4-5,6-7-8-9-10,11-12-13-14-15'

您可以通过以下方式打印到文件:

whith open('filename', 'w)
h.write(result)
h.close()