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@BorjaL=['''.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将是更好的方法。