用Python实现换行符转换的脚本的教程

很简单的一个东西,在'\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
(0)

相关推荐

  • python去除空格和换行符的实现方法(推荐)

    一.去除空格 strip() "   xyz   ".strip()            # returns "xyz"  "   xyz   ".lstrip()           # returns "xyz   "  "   xyz   ".rstrip()           # returns "   xyz"  "  x y z  ".replace(

  • Python 匹配任意字符(包括换行符)的正则表达式写法

    想使用正则表达式来获取一段文本中的任意字符,写出如下匹配规则: (.*) 结果运行之后才发现,无法获得换行之后的文本.于是查了一下手册,才发现正则表达式中,"."(点符号)匹配的是除了换行符"\n"以外的所有字符. 以下为正确的正则表达式匹配规则: ([\s\S]*) 同时,也可以用 "([\d\D]*)"."([\w\W]*)" 来表示. Web技术之家_www.waweb.cn 在文本文件里, 这个表达式可以匹配所有的英文

  • python去掉行尾的换行符方法

    如下所示: mystring.strip().replace(' ', '').replace('\n', '').replace('\t', '').replace('\r', '').strip() 以上就是小编为大家带来的python去掉行尾的换行符方法全部内容了,希望大家多多支持我们~

  • 详解python 字符串和日期之间转换 StringAndDate

    python 字符串和日期之间转换 StringAndDate           这里给出实现代码,直接可以使用.大家可以看下. 实例代码: ''''' Created on 2013-7-25 @author: Administrator ''' from datetime import datetime class StringAndDate(object): ''''' String to Date(datetime) or date to string ''' def stringTo

  • python去除字符串中的换行符

    今天写这个,要用python去除字符串中的换行符并写入文件,网上查阅,就一句代码replace("\n",""),加上之后,搞了半天,还是不对. 以上是我今天遇到的问题,以下是解决方案. 本地测试是window系统,正式用的时候是unix服务器.两者对换行符具体有什么差别我也不是很清楚.于是将 字符串写入的文件用 notepad++打开,显示 行尾符(如何用notepad++显示行尾符自己百度),发现是 CR, 所以将代码改为 replace("\r&qu

  • 用Python实现换行符转换的脚本的教程

    很简单的一个东西,在'\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:  

  • Python处理文本换行符实例代码

    本文研究的主要是Python处理文本换行符的相关内容,具体如下. 源文件每行后面都有回车,所以用下面输出时,中间会多了一行 try: with open("F:\\hjt.txt" ) as f : for line in f: print(line) except FileNotFoundError: print("读取文件出错") 有两种方法处理: 1.print后面带 end='',表示不换行 try: with open("F:\\hjt.txt&

  • 浅谈mysql数据库中的换行符与textarea中的换行符

    1. mysql数据库中的换行符 在mysql数据库中, 其换行符为\n 即 char(10), 在python中为chr(10) 2. textarea中的换行符 textarea中的换行符为\r\n 3. web应用中换行符转换 以下是python django web的处理: # data为textarea获取的数据, 其中包括换行符`\r\n`, 以下是过渡处理 data = data.replace('\r\n', '\n') # 或 data = data.replace('\r\n

  • Python RawString与open文件的newline换行符遇坑解决

    目录 背景 思路 遇到的问题 思考过程 Raw String 如果字符串没转义字符,那么 Raw String 跟普通 String 完全一致 误区:注意单个字符的引号问题 启发 正则替换的问题 open 文件的 newline 参数 背景 一次工作中,我需要完成某个文件的字符串替换. 需求是这样的:文件A有个占位符,需要利用Python3,把占位符替换成文件B的内容.文件都不大,可以一次性读到内存处理. 我想,这不是简单的open read replace write就搞定了嘛? 结果,还真有

  • php表单转换textarea换行符的方法

    下面是我对这个问题的解决过程,最后算是完全搞懂了,真是阴沟里险些翻船 1.必须知道textarea中的换行符是 \n  (个人检测发现按回车键是\n,好像在linux下是\r\n) 2.用nl2br之前,请仔细看好手册解释,我就是搞郁闷了,一般都理解为将\n转换成<br >,其实不是的: 看php手册解释: nl2br –  Inserts HTML line breaks before all newlines in a string Returns string with '<br

  • 对Python字符串中的换行符和制表符介绍

    有关换行的问题 首先提一个问题,如下. python程序代码如下: print("I'm Bob. What's your name?") 上一行代码的输出如下: I'm Bob. What's your name? 上面的输出没有换行.想在What之前换行,效果是: I'm Bob. What's your name? 该怎么办? 在What之前敲回车,行吗?不行,这个回车的效果是语句换行,不是输出内容换行. 用换行符的解决办法 上述问题的解决办法是在What之前插入换行符.写法是:

  • python按行读取文件,去掉每行的换行符\n的实例

    如下所示: for line in file.readlines(): line=line.strip('\n') 以上这篇python按行读取文件,去掉每行的换行符\n的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们. 您可能感兴趣的文章: Python处理文本换行符实例代码 Python按行读取文件的简单实现方法 python去掉行尾的换行符方法 Python实现读取文件最后n行的方法 python去除空格和换行符的实现方法(推荐)

随机推荐