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

Python 解析简单数组并将其保存到文件中,python,arrays,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() 提前

如果我有一个数组:

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()
提前感谢。

请尝试以下方法:

>>> 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]
试着这样做:

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

根据我的评论,这里有一些丑陋的例子:

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的回答也很好

根据我的评论,这里有一些丑陋的快速例子:

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的答案也不错

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

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()

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

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()

因为你的需求很简单。无需拆分数组等。特别是在需要迭代写入数组时,请使用EnumCreate

这里有一个Python3代码打印到stdout,您可以轻松地将其更改为文件输出

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

因为你的需求很简单。无需拆分数组等。特别是在需要迭代写入数组时,请使用EnumCreate

这里有一个Python3代码打印到stdout,您可以轻松地将其更改为文件输出

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

如果还需要在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

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

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


如果还需要在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

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

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



试着检查这个:试着检查这个:有没有办法使这个文件可写?提前谢谢。@Borja是的。只需创建一个列表并迭代,然后将每个值写入file@Borja
L=[''.join(str(x)表示填充中的x[i*n:i*n+n])表示范围内的i(len(填充)/n)]
然后
表示L:f中的v.write(v)
@Borja更新answer@Borja阅读更新的答案。有没有办法使其在文件中可写?提前谢谢。@Borja是的。只需创建一个列表并迭代,然后将每个值写入file@Borja
L=['''.join(str(x)表示填充中的x[i*n:i*n+n])表示范围内的i(len(填充)/n)]
然后
表示L:f中的v.write(v)
@Borja已更新answer@Borja阅读更新的答案。它将给出
1-2-3-4-5,6-7-8…
@GrijeshChauhan是的,这正是我想要展示的。在您的示例中,不能在5个值之间插入分隔符。你如何产生像“1-2-3-4-5,6-7-8-9-10,11-12-13-14-15”这样的输出?这很好,但OP没有要求。我想如果我需要它,我会用你的方法。@GrijeshChauhan你说得对。但我的重点是将内部列表转换为字符串。是的,转换为字符串,然后调用write将是更好的方法。wolf它将给出
1-2-3-4-5,6-7-8…
@GrijeshChauhan是的,这正是我想要展示的。在您的示例中,不能在5个值之间插入分隔符。你如何产生像“1-2-3-4-5,6-7-8-9-10,11-12-13-14-15”这样的输出?这很好,但OP没有要求。我想如果我需要它,我会用你的方法。@GrijeshChauhan你说得对。但我的观点是将内部列表转换为字符串。是的,转换为字符串然后调用write将是更好的方法。