用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的Tornado框架的异步任务与AsyncHTTPClient
Jun 27 Python
Python命令启动Web服务器实例详解
Feb 23 Python
python logging日志模块的详解
Oct 29 Python
浅谈Python实现2种文件复制的方法
Jan 19 Python
完美解决在oj中Python的循环输入问题
Jun 25 Python
OpenCV模板匹配matchTemplate的实现
Oct 18 Python
Python 实现自动导入缺失的库
Oct 29 Python
解决pytorch报错:AssertionError: Invalid device id的问题
Jan 10 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 Python
python批量处理多DNS多域名的nslookup解析实现
Jun 28 Python
python和C++共享内存传输图像的示例
Oct 27 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 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
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
JS 图片缩放效果代码
2010/06/09 Javascript
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
JQuery中DOM事件冒泡实例分析
2015/06/13 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
2016/01/14 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
AngularJS 自定义指令详解及示例代码
2016/08/17 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
极简的Python入门指引
2015/04/01 Python
python使用分治法实现求解最大值的方法
2015/05/12 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
获取Django项目的全部url方法详解
2017/10/26 Python
python 内置模块详解
2019/01/01 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
Python递归函数特点及原理解析
2020/03/04 Python
基于python实现删除指定文件类型
2020/07/21 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
中国专业的音频分享平台:喜马拉雅
2019/05/24 全球购物
股东合作协议书
2014/09/12 职场文书
打架检讨书范文
2015/01/27 职场文书
护士先进个人总结
2015/02/13 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书