空格与tab互相转换
def tab2space(s, ts=4): out = ''; i = 0 for c in s: if c == '\t': j = ((i + ts) // ts) * ts out += (j - i) * ' ' i = j else: out += c; i += 1 return out def space2tab(s, ts=4): def totab(b, e): if b < 0: return '' out = '' while b < e: # 好在CPU快,就这么滴吧…… n = e - b if n >= ts: out += '\t'; b = ((b + ts) // ts) * ts else: out += n * ' '; break return out out = ''; i = -1 for j in range(len(s)): if s[j] == ' ': if i < 0: i = j else: out += totab(i, j) + s[j]; i = -1 return out s = tab2space(' \t1 \t2 \t 3\t4'); print(s) s = space2tab(s); print(s)
上面的代码未经严格测试,处理一批文件前请做好备份。
glob.glob(pathname, *, recursive=False) # 中间的*是说它后面的recursive是名字参数而不是位置参数 fn(a, b, c)里的a,b,c是位置参数; glob('./*.c', recursive=True)里的recursive是名字参数。 If recursive is true, the pattern ** will match any files and zero or more directories. >>> import glob >>> glob.glob('./[0-9].*') ['./1.gif', './2.txt'] >>> glob.glob('*.gif') ['1.gif', 'card.gif'] >>> glob.glob('?.gif') ['1.gif'] >>> glob.glob('**/*.txt', recursive=True) ['2.txt', 'sub/3.txt'] >>> glob.glob('./**/', recursive=True) ['./', './sub/']
Windows下文本文件用\r\n分隔行,Linux下用\n。'rt'或'wt'模式open,会做\r\n和\n间的相互转换。Linux下也可以用'rt'或'wt'. 'rb'或'wb'时不做转换。open还有个newline参数指定分隔符:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Linux下vim打开文本文件时,可能在每行末尾显示个^M, 它是Ctrl-M, \r, carriage return, 回车(打字机的打字头回到最左边), \n是new line, 新行,搬下打字机的把手换一行。两条命令dos2unix和unix2dos可删除或添加\r. 可能需要apt-get install dos2unix之类。
vim里ts是tab size的缩写,sw是shift width的缩写, tw是text width的缩写。除了全局设定(.vimrc)外,还可以每个文件单独设置: mode line. mode line放在所用语言的注释的里,如//, /* */ #,vim只看有没有vim: 例如: /* vim: set sw=4 ts=4 */
vim的modeline - 博客园 ASCII中的控制字符 - 博客园 带鱼屏时代tw=60, are you kidding me?
补充: MadEdit有空格和TAB互转功能,在编辑-高级里,但它只有多文件查找/替换字符串,没有多文件空格和TAB互转。