【发布时间】:2011-02-22 07:45:00
【问题描述】:
我正在尝试将大量需要分离到不同文件中的数据保存起来,就像这样 数据_1.dat 数据_2.dat 数据_3.dat data_4.dat
如何在 python 中实现?
【问题讨论】:
-
对于简单的用例来说这可能是一种矫枉过正,但我编写了一个小型 python 库以线程安全和覆盖安全的方式执行此操作:pypi.python.org/pypi/seqfile
我正在尝试将大量需要分离到不同文件中的数据保存起来,就像这样 数据_1.dat 数据_2.dat 数据_3.dat data_4.dat
如何在 python 中实现?
【问题讨论】:
from itertools import count
filename = ("data_%03i.dat" % i for i in count(1))
next(filename)
# 'data_001.dat'
next(filename)
# 'data_002.dat'
next(filename)
# 'data_003.dat'
【讨论】:
itertools 编写这个作为生成器 ;)
for i in range(10):
filename = 'data_%d.dat'%(i,)
print filename
【讨论】:
filename = 'data_%d.dat' % i
print '%d'%(i,), s。当您不想打印换行符时,它也会更清楚。但是,是的,% i 也可以。
print '{:d} {}'.format(i,s) 作为您示例的等效但更冗长的版本....
类似于 Sven 的解决方案,但升级到完整的生成器:
from itertools import count
def gen_filenames(prefix, suffix, places=3):
"""Generate sequential filenames with the format <prefix><index><suffix>
The index field is padded with leading zeroes to the specified number of places
"""
pattern = "{}{{:0{}d}}{}".format(prefix, places, suffix)
for i in count(1):
yield pattern.format(i)
>>> g = gen_filenames("data_", ".dat")
>>> for x in range(3):
... print(next(g))
...
data_001.dat
data_002.dat
data_003.dat
【讨论】:
如果您采用 itertools 方式,为什么要将它与生成器表达式混合使用?
>>> import itertools as it
>>> fngen= it.imap("file%d".__mod__, it.count(1))
>>> next(fngen)
'file1'
【讨论】: