用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 中文字符串的处理实现代码
Oct 25 Python
python中cPickle用法例子分享
Jan 03 Python
Django rest framework基本介绍与代码示例
Jan 26 Python
pandas通过索引进行排序的示例
Nov 16 Python
如何利用Python分析出微信朋友男女统计图
Jan 25 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
Python数据类型之Dict字典实例详解
May 07 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
Oct 12 Python
python实现银行实战系统
Feb 26 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
May 25 Python
python中selenium库的基本使用详解
Jul 31 Python
Django使用channels + websocket打造在线聊天室
May 20 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
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
详解PHP版本兼容之openssl调用参数
2018/07/25 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
jQuery ui 1.7更新小结
2009/08/15 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
vue element中axios下载文件(后端Python)
2019/05/10 Javascript
一文快速详解前端框架 Vue 最强大的功能
2019/05/21 Javascript
原生js实现随机点餐效果
2019/12/10 Javascript
jquery实现轮播图特效
2020/04/12 jQuery
Vue实现点击当前行变色
2020/12/14 Vue.js
react项目从新建到部署的实现示例
2021/02/19 Javascript
Python中用sleep()方法操作时间的教程
2015/05/22 Python
python简单获取数组元素个数的方法
2015/07/13 Python
Python实现简单网页图片抓取完整代码实例
2017/12/15 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
日本无添加化妆品:HABA
2016/08/18 全球购物
集团公司人力资源部岗位职责
2014/01/03 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
公共场所禁烟标语
2014/06/25 职场文书
创先争优活动心得体会
2014/09/04 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书
2015年七一建党节活动总结
2015/03/20 职场文书
导师鉴定意见
2015/06/05 职场文书