用Python实现换行符转换的脚本的教程


Posted in Python onApril 16, 2015

很简单的一个东西,在'\n'、'\r\n'、'\r'3中换行符之间进行转换。
用法

usage: eol_convert.py [-h] [-r] [-m {u,p,w,m,d}] [-k] [-f]

                      filename [filename ...]
Convert Line Ending
positional arguments:

  filename        file names
optional arguments:

  -h, --help      show this help message and exit

  -r              walk through directory

  -m {u,p,w,m,d}  mode of the line ending

  -k              keep output file date

  -f              force conversion of binary files

源码

这只能算是argparse模块和os模块的utime()、stat()、walk()的一个简单的练习。可以用,但还相当不完善。

#!/usr/bin/env python 
  #2009-2011 dbzhang800 
  import os 
  import re 
  import os.path 
   
  def convert_line_endings(temp, mode): 
    if mode in ['u', 'p']: #unix, posix 
      temp = temp.replace('\r\n', '\n') 
      temp = temp.replace('\r', '\n') 
    elif mode == 'm':   #mac (before Mac OS 9) 
      temp = temp.replace('\r\n', '\r') 
      temp = temp.replace('\n', '\r') 
    elif mode == 'w':   #windows 
      temp = re.sub("\r(?!\n)|(?<!\r)\n", "\r\n", temp) 
    return temp 
   
  def convert_file(filename, args): 
    statinfo = None 
    with file(filename, 'rb+') as f: 
      data = f.read() 
      if '\0' in data and not args.force: #skip binary file... ? 
        print '%s is a binary file?, skip...' % filename 
        return 
      newdata = convert_line_endings(data, args.mode) 
      if (data != newdata): 
        statinfo = os.stat(filename) if args.keepdate else None 
        f.seek(0) 
        f.write(newdata) 
        f.truncate() 
    if statinfo: 
      os.utime(filename, (statinfo.st_atime, statinfo.st_mtime)) 
    print filename 
   
  def walk_dir(d, args): 
    for root, dirs, files in os.walk(d): 
      for name in files: 
        convert_file(os.path.join(root, name), args) 
   
  if __name__ == '__main__': 
    import argparse 
    import sys 
    parser = argparse.ArgumentParser(description='Convert Line Ending') 
    parser.add_argument('filename', nargs='+', help='file names') 
    parser.add_argument('-r', dest='recursive', action='store_true', 
        help='walk through directory') 
    parser.add_argument('-m', dest='mode', default='d', choices='upwmd', 
        help='mode of the line ending') 
    parser.add_argument('-k', dest='keepdate', action='store_true', 
        help='keep output file date') 
    parser.add_argument('-f', dest='force', action='store_true', 
        help='force conversion of binary files') 
    args = parser.parse_args() 
    if args.mode == 'd': 
      args.mode = 'w' if sys.platform == 'win32' else 'p' 
   
    for filename in args.filename: 
      if os.path.isdir(filename): 
        if args.recursive: 
          walk_dir(filename, args) 
        else: 
          print '%s is a directory, skip...' % filename 
      elif os.path.exists(filename): 
        convert_file(filename, args) 
      else: 
        print '%s does not exist' % filename
Python 相关文章推荐
Python中方法链的使用方法
Feb 23 Python
Python爬取APP下载链接的实现方法
Sep 30 Python
Python 判断是否为质数或素数的实例
Oct 30 Python
Python实现检测文件MD5值的方法示例
Apr 11 Python
python3.6的venv模块使用详解
Aug 01 Python
Python小工具之消耗系统指定大小内存的方法
Dec 03 Python
对python For 循环的三种遍历方式解析
Feb 01 Python
对python 通过ssh访问数据库的实例详解
Feb 19 Python
Python 变量的创建过程详解
Sep 02 Python
解决pyqt5异常退出无提示信息的问题
Apr 08 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
Python实现的扫码工具居然这么好用!
Jun 07 Python
Python下的subprocess模块的入门指引
Apr 16 #Python
Python下的twisted框架入门指引
Apr 15 #Python
Python代码调试的几种方法总结
Apr 15 #Python
详解Python中with语句的用法
Apr 15 #Python
python获取本机外网ip的方法
Apr 15 #Python
python中常用检测字符串相关函数汇总
Apr 15 #Python
python使用自定义user-agent抓取网页的方法
Apr 15 #Python
You might like
Yii获取当前url和域名的方法
2015/06/08 PHP
PHP远程调试之XDEBUG
2015/12/29 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
Jquery中删除元素的实现代码
2011/12/29 Javascript
jquery iframe操作详细解析
2013/11/20 Javascript
JS两种定义方式的区别、内部原理
2013/11/21 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
React Native之ListView实现九宫格效果的示例
2017/08/02 Javascript
JavaScript中各数制转换全面总结
2017/08/21 Javascript
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
python控制台显示时钟的示例
2014/02/24 Python
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
python如何实现复制目录到指定目录
2020/02/13 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
自荐书模板
2013/12/15 职场文书
电视节目策划方案
2014/05/16 职场文书
2014年小学重阳节活动策划方案
2014/09/16 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
慰问信格式规范
2015/03/23 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
用Python可视化新冠疫情数据
2022/01/18 Python
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python