【问题标题】:How do I format text from a file in Python?如何在 Python 中格式化文件中的文本?
【发布时间】:2012-03-08 06:50:46
【问题描述】:

我有一个包含 50 行的文件(每行都有一个名称),我想读取每一行并读取它,然后打印它,但格式为每列 5 列和 10 行。

它会是这样的:

xxxxx——xxxxx——xxxxx——xxxxx——xxxxx

xxxxx——xxxxx——xxxxx——xxxxx——xxxxx

xxxxx——xxxxx——xxxxx——xxxxx——xxxxx

xxxxx——xxxxx——xxxxx——xxxxx——xxxxx

xxxxx——xxxxx——xxxxx——xxxxx——xxxxx

这是我到目前为止的代码。它只是读取并在换行符上打印每一行:

f = open('file.txt', 'r')
for x in f:
    x = x.lstrip()
    x = x.rstrip()
    x = x.title()
    print x

x.lstrip 和 x.rstip 和 x.title 的原因是因为文件中的文本格式很奇怪,所以我必须这样做。这是为了一个任务。谢谢!

【问题讨论】:

  • 输入文件是什么样的?
  • 对不起,这是我的第一个问题,我不知道如何缩进行。我知道我的代码看起来不对:/
  • 编辑问题添加信息,不要放在cmets中。该问题应包含回答问题所需的所有信息。
  • 您可以在字符串上只调用 strip(),而不是同时执行 lstrip() 和 rstrip()。
  • 我只想读一行,使用 x.split('--') 用分隔符 '--' 分隔每一行,然后剥离每个单独的名称并打印它们,但你必须这样做。

标签: python formatting


【解决方案1】:

您可以尝试使用文件类型 .dat,然后 f = loadtxt("file.dat") 这将使用您已经在文件中创建的列和行将您的数据放入一个数组中。您将不得不稍微编辑数据文件,但它肯定会起作用。如果你想改变更多的东西,你可以使用这样的命令,

c = f[:,5] 这将创建一个包含 1 列的新数组,其中包含原始文件中第 5 列的所有数据

【讨论】:

    【解决方案2】:

    这是你想要的吗? (我可能错误地解释了您需要的内容)您希望新输出的每行显示文件中的 5 行,每行由“--”分隔?

    f = open('file.txt', 'r')
    text = ""
    lines = []
    counter = 0
    
    for line in f:
        line = line.strip()
        if counter % 5 == 0 and text > '':
            counter = 0
            lines.append(text)
            text = ''
    
        text += line + ' '
        counter += 1  
    
    
    for line in lines:
        vals = tuple(line.split())
        print('%s -- %s -- %s -- %s -- %s' % (vals))
    

    【讨论】:

      【解决方案3】:

      这样的事情可能会奏效:

      def print_table(lines, col_num, col_width):
          for line_ix in range(0, len(lines), col_num):
              print ' -- '.join([line.strip().ljust(col_width) for line in lines[line_ix:line_ix+col_num]])
      

      【讨论】:

        【解决方案4】:

        以下内容不适合初学者。将其视为众多选项之一(而不是最佳方式)。

        您可以使用What is the most “pythonic” way to iterate over a list in chunks? 的答案一次阅读 5 行:

        #!/usr/bin/env python3
        import fileinput
        
        # read 5 lines at a time from stdin or file(s) at the command-line
        for row in zip(*[iter(fileinput.input())]*5):
            print(' -- '.join("%-4s" % item.strip() for item in row))
        

        注意:它期望输入中的 5*m 行会产生 m 输出行。

        fileinput.input() 在输入行上返回一个迭代器,这里是an explanation how the above code group the lines

        Example

        $ python reformat-input.py input.txt
        a0   -- b0   -- c00  -- d0   -- e0  
        a1   -- b111 -- c1   -- d1   -- e1  
        a2   -- b2   -- c2   -- d2   -- e2 
        

        input.txt 在哪里:

        a0
        b0
        c00
        d0
        e0
        a1
        b111
        c1
        d1
        e1
        a2
        b2
        c2
        d2
        e2
        

        【讨论】:

          猜你喜欢
          • 2015-12-05
          • 1970-01-01
          • 2014-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-20
          • 1970-01-01
          • 2013-04-13
          相关资源
          最近更新 更多