用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 json encode datetime类型
Dec 28 Python
python动态监控日志内容的示例
Feb 16 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
Apr 17 Python
Python中IPYTHON入门实例
May 11 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
Jul 01 Python
如何更优雅地写python代码
Jul 02 Python
python实现文本进度条 程序进度条 加载进度条 单行刷新功能
Jul 03 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
Jan 18 Python
python安装第三方库如xlrd的方法
Oct 31 Python
详解pycharm的python包opencv(cv2)无代码提示问题的解决
Jan 29 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 Python
Python 绘制多因子柱状图
May 11 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类
2008/04/09 PHP
攻克CakePHP系列三 表单数据增删改
2008/10/22 PHP
PHP Reflection API详解
2015/05/12 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
详解Yii2 rules 的验证规则
2016/12/02 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
js 图片懒加载的实现
2020/10/21 Javascript
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
python读取excel表格生成erlang数据
2017/08/26 Python
python实现人民币大写转换
2018/06/20 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
计算机专业职业规划
2014/02/28 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
人资专员岗位职责
2014/04/04 职场文书
服务理念口号
2014/06/11 职场文书
大学生心理活动总结
2014/07/04 职场文书
社区活动策划方案
2014/08/21 职场文书
python 中[0]*2与0*2的区别说明
2021/05/10 Python
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技