Align columns in a text file

前端 未结 3 1419
北海茫月
北海茫月 2021-02-05 10:03

I am a Python noobie and I\'m stuck on something I know is going to be simple...

I have a plain text file that contains user login data:

dtrapani  HCPD-E         


        
相关标签:
3条回答
  • 2021-02-05 10:51

    str.ljust(width, [fillchar=" "]) (http://docs.python.org/2/library/stdtypes.html#str.ljust) seems like what you're after. Left justify each field when printing to the maximum length + a little bit.

    For the last field to match your example, you'll want to right justify it instead using rjust.

    0 讨论(0)
  • 2021-02-05 10:53

    I would go for the new(er) print formatter with this one (assuming your fields are consistent). The print/format statement is pretty easy to use and can be found here. Since your data can be seen as a list, you can do a single call to format and supplying the correct formatter data you'll get your output. This has a bit more fine grained control than ljust or rjust but has the downside that you need to know that your data coming in is consistent.

    with open(r'C:\path\to\logons.txt', 'r') as f:
        for line in f:
            data = line.split()    # Splits on whitespace
            print '{0[0]:<15}{0[1]:<15}{0[2]:<5}{0[3]:<15}{0[4]:>15}'.format(data)
    
    0 讨论(0)
  • 2021-02-05 10:56
    #!/usr/bin/env python
    import sys
    inputfile = '''dtrapani HCPD-EPD-3687 Mon 05/13/2013 9:47:01.72
    dlibby HCPD-COS-4611 Mon 05/13/2013 9:49:34.55
    lmurdoch HCPD-SDDEB-3736 Mon 05/13/2013 9:50:38.48
    lpatrick HCPD-WIN7-015 Mon 05/13/2013 9:57:44.57
    mlay HCPD-WAR-3744 Mon 05/13/2013 10:00:07.94
    eyoung HCPD-NLCC-0645 Mon 05/13/2013 10:03:01.83'''.split('\n')
    output = sys.stdout
    lengths = [10,17,5,14,0]
    for line in inputfile:
        line = line.split()
        for field, fieldlength in zip(line,lengths):
            output.write(field.ljust(fieldlength))
        output.write('\n')
    
    0 讨论(0)
提交回复
热议问题