用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对html代码进行escape编码的方法
May 04 Python
python 把文件中的每一行以数组的元素放入数组中的方法
Apr 29 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
Python+OpenCV实现图像融合的原理及代码
Dec 03 Python
python加载自定义词典实例
Dec 06 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
Dec 25 Python
Python3 io文本及原始流I/O工具用法详解
Mar 23 Python
Python super()方法原理详解
Mar 31 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 Python
Django项目在pycharm新建的步骤方法
Mar 02 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
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
教你如何使用php session
2013/10/28 PHP
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
jQuery $.each的用法说明
2010/03/22 Javascript
Jquery事件的连接使用示例
2013/06/18 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
JS实现页面跳转与刷新的方法汇总
2019/08/30 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
python实现两个dict合并与计算操作示例
2019/07/01 Python
在Django下创建项目以及设置settings.py教程
2019/12/03 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
css3弹性盒模型实例介绍
2013/05/27 HTML / CSS
浅谈利用缓存来优化HTML5 Canvas程序的性能
2015/05/12 HTML / CSS
北美三大旅游网站之一:Travelocity
2017/08/12 全球购物
软件测试工程师面试问题精选
2016/10/28 面试题
公积金单位接收函
2014/01/11 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
应聘教师自荐书
2014/06/16 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
2014企业年终工作总结
2014/12/23 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书
2015年科普工作总结
2015/07/23 职场文书
Python OpenCV 图像平移的实现示例
2021/06/04 Python