用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性能优化技巧
Mar 09 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
Jul 13 Python
Python中eval带来的潜在风险代码分析
Dec 11 Python
浅析Python数据处理
May 02 Python
Python语法分析之字符串格式化
Jun 13 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 Python
利用Python小工具实现3秒钟将视频转换为音频
Oct 29 Python
解决torch.autograd.backward中的参数问题
Jan 07 Python
python实现用类读取文件数据并计算矩形面积
Jan 18 Python
Python实现数字的格式化输出
Aug 01 Python
Python中Yield的基本用法
Oct 18 Python
Python实现8种常用抽样方法
Jun 27 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
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
php GD绘制24小时柱状图
2008/06/28 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
js window.onload 加载多个函数的方法
2009/11/02 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
vue2.0结合Element-ui实战案例
2019/03/06 Javascript
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
python如何查看微信消息撤回
2018/11/27 Python
python3中property使用方法详解
2019/04/23 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
python 实现音频叠加的示例
2020/10/29 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
内容编辑个人求职信
2013/12/10 职场文书
预备党员2014全国两会学习心得体会
2014/03/10 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
市场营销专业求职信
2014/06/17 职场文书
自查自纠工作总结
2014/10/15 职场文书
小学三八妇女节活动总结
2015/02/06 职场文书
2015年推普周活动总结
2015/03/27 职场文书
Python机器学习之决策树和随机森林
2021/07/15 Javascript
HttpClient实现表单提交上传文件
2022/08/14 Java/Android