文本编辑: 表格内容自动tab对齐

  经常用文本格式来看文章的人都会遇到这样一件事情, 就是把外部的表格复制过来后, 一般都不能很好的对齐. 一直以来, 我都是手动一行行一列列地把它们理整齐, 虽然费力, 但经手一遍后, 也算颇有收获. 但有时任务量实在是太大了, 总是在重复性的劳动, 让人不免大为光火. 今天终于灵机一动, 觉得用脚本应该也可以实现, 即使不能完全替代人工, 总可以省几分人力. 结果居然让我做成了, 虽然代码不复杂, 但成就感确实是满满的…
先展示一下效果吧:
tabify
具体使用方法如下:
  我的编辑器用的是 editplus 软件, 它可以通过配置用户工具来加载外部的脚本, 可完成一些常见的任务, 这一块我就不再描述了, 有需要可以自己摸索一下.
  下面贴一下我的处理脚本吧, 比较简单, 只是对常规的英文字符宽度计1, 然后其他字符宽度计2, 然后增加空格到指定位置就行了. 代码如下:

''' 
  将读取的表格内容格式化. 
  通过filter, 读取选择内容然后取代
'''
from sys import argv                # 获取参数字符串
import sys                          # 标准输入输出
import re                           # 正则判断


def getUniWid(s):
  """获取unicode字符串的宽度"""
  wid = 0
  for ch in s:
    if ord(ch) < 256:
      wid += 1
    else:
      wid += 2

  return wid


if __name__ == "__main__":          # 主程序
  if not argv[1]:                   # 没有选择块
    exit()
  else:                             # 有选择块时
    with open(sys.stdin.fileno(), "rb", closefd=False) as fin:
      with open(sys.stdout.fileno(), "wb", closefd=False) as fout:
        while True:
          line = fin.readline()
          if not line:              # 当没有输入时读入的是空字符串
            break
          
          sIn = line.decode('utf-8')         # 固定采用uft8进行解码
          sOut = ""
          pos = 0
          pattern = re.compile(r"\S {2,}\S")
          while True:
            m = pattern.search(sIn)
            if m:
              pos += 1
              sOut += sIn[:m.start()+1]
              sIn = sIn[m.end()-1:]
              wid = (32*pos)-getUniWid(sOut)
              if wid < 1:
                wid = 4
              sOut += " " * wid
            else:
              sOut += sIn
              fout.write(sOut.encode(encoding="utf8"))
              break

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值