Board logo

标题: [原创代码] Python实现文本左右对齐排版 [打印本页]

作者: 依山居    时间: 2015-11-4 12:37     标题: Python实现文本左右对齐排版

  1. # python版实现文本左右对齐排版
  2. # 题目来源: http://www.bathome.net/thread-1246-1-1.html
  3. # 依山居 7:17 2015/11/4
  4. # str.format 字符串格式化参考:
  5. # http://www.crifan.com/python_string_format_fill_with_chars_and_set_alignment/
  6. # just()字符串对齐 参考:
  7. # http://blog.csdn.net/u012515223/article/details/20463231
  8. '''
  9. 1.txt内容:
  10. 111111111111111111111    98912 张三
  11. 222222222222222222    150020 李四四
  12.   333333333333333333333    360000 王五
  13. 444444444444444444    2332 赵六六
  14.   555555555555555555    222 田七
  15. 666666666666666666666    999999 舞吧
  16. '''
  17. #说明我的代码没按题目要求全部使用空格填充是为了让代码用法看起来直观一些。
  18. #方法一 format格式化对齐
  19. def f1():   
  20.     with open("1.txt","r") as f:
  21.         for s in f:
  22.             l=s.rsplit ()
  23.             t='{0:-<25} {1: >7} {2}'.format(l[0],l[1],l[2])   
  24.             print(str(t))
  25. '''
  26. 输出:
  27. 111111111111111111111----   98912 张三
  28. 222222222222222222-------  150020 李四四
  29. 333333333333333333333----  360000 王五
  30. 444444444444444444-------    2332 赵六六
  31. 555555555555555555-------     222 田七
  32. 666666666666666666666----  999999 舞吧
  33. '''
  34. #方法2 使用just()对齐
  35. r=''
  36. def f2():
  37.     f=open("1.txt","r")
  38.     for s in f:
  39.         l=s.rsplit()
  40.         print(l[0].ljust(25," "),l[1].rjust(10,"^"),l[2])
  41. '''
  42. 输出:
  43. 111111111111111111111     ^^^^^98912 张三
  44. 222222222222222222        ^^^^150020 李四四
  45. 333333333333333333333     ^^^^360000 王五
  46. 444444444444444444        ^^^^^^2332 赵六六
  47. 555555555555555555        ^^^^^^^222 田七
  48. 666666666666666666666     ^^^^999999 舞吧
  49. '''
  50. #方法3
  51. '''
  52. 思路是rsplit拆分成三列,l得到如['111111111111111111111', '98912', '张三']
  53. 算出列1,列2的最长,以此算出需要填充的长度,
  54. '''
  55. def f3():
  56.     f=open("1.txt","r")
  57.     txt=f.readlines()
  58.     maxa=0
  59.     maxb=0
  60.     for line in txt:
  61.         line=line.rsplit()
  62.         la=len(line[0])
  63.         lb=len(line[1])
  64.         if la >maxa:
  65.             maxa=la
  66.         if lb > maxb:
  67.             maxb=lb
  68.     for line in txt:      
  69.         line=line.rsplit()
  70.         la=len(line[0])
  71.         lb=len(line[1])
  72.         if la ==maxa:
  73.             tla=line[0]
  74.         elif la<maxa:
  75.             tla=line[0]+">"*(maxa-la)
  76.         if lb ==maxb:
  77.             tlb=line[1]
  78.         elif lb<maxb:
  79.             tlb=" "*(maxb-lb)+line[1]
  80.         print(tla,tlb,line[2])
  81. '''
  82. 输出:
  83. 111111111111111111111  98912 张三
  84. 222222222222222222>>> 150020 李四四
  85. 333333333333333333333 360000 王五
  86. 444444444444444444>>>   2332 赵六六
  87. 555555555555555555>>>    222 田七
  88. 666666666666666666666 999999 舞吧
  89. '''
复制代码

作者: 依山居    时间: 2015-11-6 01:57

  1. """
  2. #方法4 重用了方法3的上半部分代码算出列1列2最大长度,以此对齐顶点。
  3. #这个方法的思路是不使用空格或者其它符号填充,而是在写入文件时,
  4. #指针直接前移使字符对齐。空的字符位置会自动被\x00填充?
  5. #
  6. """
  7. def f4():
  8.    
  9.     f=open("1.txt","r")
  10.     txt=f.readlines()
  11.     maxa=0
  12.     maxb=0
  13.     for line in txt:
  14.         line=line.rsplit()
  15.         la=len(line[0])
  16.         lb=len(line[1])
  17.         if la >maxa:
  18.             maxa=la
  19.         if lb > maxb:
  20.             maxb=lb
  21.     w=open("temp.txt","w+")
  22.     for line in txt:
  23.         line=line.rsplit()
  24.         la=len(line[0])
  25.         lb=len(line[1])
  26.         w.write(line[0])
  27.         #算了半天
  28.         tw=maxa+maxb+1-la-lb
  29.         w.seek(tw+w.tell())
  30.         w.write(line[1])
  31.         w.seek(w.tell()+1)
  32.         w.write(line[2]+"\n")
  33.     w.flush()
  34.     w.seek(0)
  35.     txt=w.read()
  36.     print(txt)
  37.         
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2