我是一个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
我正在尝试在对齐的列中打印数据:
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
我在这个网站上搜索过,只是杀了我的“谷歌机器”!感谢您提供的任何帮助。
编辑:我忘了包含我的代码:
with open(r'C:\path\to\logons.txt', 'r') as f:
for line in f:
data = line.strip()
print(data)
答案 0 :(得分:12)
我会选择这个新的(呃)打印格式化程序(假设你的字段是一致的)。 print / format语句非常易于使用,可以找到here。由于您的数据可以看作列表,因此您可以进行一次调用以格式化并提供正确的格式化数据,您将获得输出。这比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)
答案 1 :(得分:5)
str.ljust(width, [fillchar=" "])
(http://docs.python.org/2/library/stdtypes.html#str.ljust)似乎就像你追求的那样。
当打印到最大长度+一点点时,左对齐每个字段。
对于与您的示例匹配的最后一个字段,您需要使用rjust右对齐它。
答案 2 :(得分:1)
#!/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')