首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:文件格式

Python:文件格式
EN

Stack Overflow用户
提问于 2010-03-06 16:10:58
回答 4查看 230关注 0票数 0

我有一个for循环,它引用字典并打印出与键关联的值。代码如下:

代码语言:javascript
复制
for i in data:
    if i in dict:
        print dict[i],

我将如何格式化输出,以便每60个字符创建一条新行?例如,将字符数沿边数计算:

0001

0061

0121 LDPQACPTVIDQLTEMLKETGIPVQVIFSSGKDVDLLPQRSNKGNATQYLQQHLAMEPSQ

EN

回答 4

Stack Overflow用户

发布于 2010-03-06 16:29:26

这是一个非常棘手的格式化问题,但我认为以下代码:

代码语言:javascript
复制
import sys

class EveryN(object):
  def __init__(self, n, outs):
    self.n = n        # chars/line
    self.outs = outs  # output stream
    self.numo = 1     # next tag to write
    self.tll = 0      # tot chars on this line
  def write(self, s):
    while True:
      if self.tll == 0: # start of line: emit tag
        self.outs.write('%4.4d ' % self.numo)
        self.numo += self.n
      # wite up to N chars/line, no more
      numw = min(len(s), self.n - self.tll)
      self.outs.write(s[:numw])
      self.tll += numw
      if self.tll >= self.n:
        self.tll = 0
        self.outs.write('\n')
      s = s[numw:]
      if not s: break

if __name__ == '__main__':
  sys.stdout = EveryN(60, sys.stdout)
  for i, a in enumerate('abcdefgh'):
    print a*(5+ i*5),

演示如何做到这一点--作为主脚本(5a,10b,等等,中间有空格)为演示目的运行时的输出是:

代码语言:javascript
复制
0001 aaaaa bbbbbbbbbb ccccccccccccccc dddddddddddddddddddd eeeeee
0061 eeeeeeeeeeeeeeeeeee ffffffffffffffffffffffffffffff ggggggggg
0121 gggggggggggggggggggggggggg hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
0181 hhhhhhh
票数 1
EN

Stack Overflow用户

发布于 2010-03-06 16:15:34

你好像在找textwrap

--文本缠绕模块提供了两个方便的函数: work ()和fill(),以及TextWrapper (完成所有工作的类)和一个实用函数dedent()。如果您只是包装或填充一个或两个文本字符串,那么方便函数应该足够好;否则,您应该使用TextWrapper实例来提高效率。

票数 0
EN

Stack Overflow用户

发布于 2010-03-06 16:28:28

代码语言:javascript
复制
# test data
data = range(10)
the_dict = dict((i, str(i)*200) for i in range( 10 ))

# your loops as a generator
lines = ( the_dict[i] for i in data if i in the_dict )

def format( line ):
    def splitter():
        k = 0
        while True:
            r = line[k:k+60] # take a 60 char block
            if r: # if there are any chars left
                yield "%04d %s" % (k+1, r) # format them
            else:
                break
            k += 60
    return '\n'.join(splitter()) # join all the numbered blocks

for line in lines:
        print format(line)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2393120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档