对齐文本文件中的列

cst*_*ord 13 python python-3.x

我是一个Python noobie,我坚持我知道的事情会变得简单......

我有一个包含用户登录数据的纯文本文件:

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
Run Code Online (Sandbox Code Playgroud)

我正在尝试在对齐的列中打印数据:

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
Run Code Online (Sandbox Code Playgroud)

我在这个网站上搜索过,只是杀了我的"谷歌机器"!感谢您提供任何帮助.

编辑:我忘了包含我的代码:

    with open(r'C:\path\to\logons.txt', 'r') as f:
        for line in f:
            data = line.strip()
            print(data)
Run Code Online (Sandbox Code Playgroud)

Jef*_*ier 14

我会选择这个新的(呃)打印格式化程序(假设你的字段是一致的).print/format语句非常易于使用,可以在这里找到.由于您的数据可以看作列表,因此您可以进行一次调用以格式化并提供正确的格式化数据,您将获得输出.这比ljust或rjust有一些更精细的控制,但有一个缺点,你需要知道你的数据是否一致.

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)
Run Code Online (Sandbox Code Playgroud)


Sys*_*hus 5

str.ljust(width, [fillchar=" "])http://docs.python.org/2/library/stdtypes.html#str.ljust)似乎就是您想要的。当打印到最大长度+一点点时,左对齐每个字段。

为了使最后一个字段与您的示例匹配,您需要对它进行右对齐,而不是使用rjust。