文档批量切割与转换,Python批量修改文件名

作者: 网络编程  发布:2019-09-03

Python批量修改文件名-后缀,

LyncLynn用途:

 

批量改变文件格式,文件名后缀。

#Version: V1.0
#Author:lynclynn

#Description:Change the filename 
#CreateDate:20151130

#UpdateDate:

# -*- coding: UTF-8 -*-
import os
#列出当前目录(E:PythonCode)下所有的文件
files =os.listdir("E:PythonCode")

#分离文件名字和后缀
for filename in files:
    portion=os.path.splitext(filename)
    print portion
    #根据后缀来修改
    if portion[1]==".py":
        newname=portion[0]+".txt"
        #切换文件路径
        os.chdir("E:PythonCode")
        os.rename(filename,newname)

大概遭逢的标题
1.Error 32 .文件已经开垦
2.WindowsError: [Error 183] 文件已经存在
3.Error2.文件路线难点

LyncLynn用途: 批量修改文件格式,文件名后缀。 # Version: V1.0 # Author:lynclynn # Description:Change the filename # CreateDate...

幸存一 马克down 文件,在那之中有 46个小组块,组块之间以二级标题区分。每个二级标题下有 1 张图纸,然后是文字。

以下是文书档案中有的内容示例:

## 1. 小明![](小明打羽毛球的球场网址)今天小明去打羽毛球。## 2. 小红![](小红逛街的商店网址)今天小红去逛街。

近些日子愿意:

  • 把那 50 个组块单独切割出来
  • 各类组块均转变为 doc 文件
  • 文本名称叫小标题名(只有中文,不含数字序号)
  • 种种小组块文件中,以小标题为内文标题(唯有汉语,不含数字序号)

问:

哪些批量到位该工作?

  1. 将 1 个 md 文件批量切割 md 文件 为 50 个 md 文件
  2. 切割的同有的时候间,将小标题作为文件名抽出并一向为各个组块文件命名
  3. 将 50 个 md 文件批量转变到 50 个 doc 文件
  • python:撰写批量切割的 python 脚本
  • pandoc:用于格式调换
  • bash:通过 shell 脚本完毕批量的格式调换;有希望需求用上批量重命名的命令 rename 来进展边角修改

首先思索:

若果是手动切割,进度是何等的?

大廷广众我们是以二级标题为切割标识的。而二级题指标代码是 ##,会不会在文中其余地方出现呢?

越来越考查与思虑会开采:切割标记其实不是 ##,而是 n## ——也正是说,段落中依旧网址中冒出的 ## 都不是二级标题的代码,独有换行符 n## 接二连三出现时,## 才是二级标题代码。因而大家明确了切割标记为:n##

python 中字符串的 str.split(sep, maxsplit) 方法可承受 2 个参数[1]:

  1. 第 1 个参数 sep 表示分割标记(这里是 n##
  2. 第 2 个参数 maxsplit 表示最多分割五回(由于是 50 份,故应该切割 肆十七次)

因而将读入的全文以小标题为界分割为 50 份字符串的主要代码是:

# 已将全文读入 finContent 中sp50 = finContent.split("n##", 49)

批量导出到 50 个 md 文件中并轻易,若无上述命名必要,那么直接一个迭代 50 次的 for 循环即可缓慢解决该难题。

难题在于:

怎样获取各小标题名并为新转换的文书命名?

着重各种小组块,开采规律:

  1. 种种二级标题中皆有克罗地亚语句号「.」,在「.」后的局地,除去空格,即为小标题全体文字,那意味着:即使获得小标题所在行的内容,就可以用 str.split() 方法得到小标题对应文字
  2. 二级标题下即为图片代码,也正是说对那 50 个字符串来讲,每种字符串能够 nn![]( 为分割标记,从而得到小标题所在行的剧情

故而收获小题目标基本点代码为:

index = ((((iStr.split("nn![].split.split[1]

综合前 2 项职务,该脚本代码如下(同期放在 GitHub 库中):

#coding: utf-8originPath = "/home/sushangjun/Documents/"srcPath = originPath + "Top50Bussiness.txt"tarPath = originPath + "output50/"fin = open(srcPath, 'r')finContent = fin.read()sp50 = finContent.split("n##", 49)for iStr in sp50: index = ((((iStr.split("nn![].split.split[1] fout = open(tarPath + "{}.md".format, 'w') fout.write("## " + index + "nn![](" + (iStr.split("nn![] fout.close()fin.close()

在命令行中施行该脚本,就能够到位批量切割职分。

此间须要利用 Pandoc[2],Debian 系 Linux 只要使用 apt-get 安装就能够:

$ sudo apt-get install pandoc

完成后,输入 pandoc --version 查看是还是不是安装成功。

若安装成功,只要下述命令,就可以将 a.md 转换为 a.doc

$ pandoc a.md -o a.doc -c Github.css

唯独那不得不促成单文件的格式转变,若需求多文件的格式转变,分明须求批管理。对 *nix 稍有打探的人很轻易联想到应用 bash shell 来减轻那些难题:

  1. 读取目录下的公文列表
  2. 对读取的每种文件名试行上述 pandoc 命令

鉴于事务急切,因而查找网络资料后,在命令行中输入下述命令,完结文件格式批量调换:[3]

注:下述操作均私下认可在 50 个 md 文件所在目录下开展

$ ls > aa.md$ cat aa.md |while read line> do> pandoc $line -o $line.doc -c Github.css> done

如此那般基本到位了批量格式转变难题。但有 1 点不美:那就是在此操作下,获得的公文后缀是 .md.doc 而非 .doc。怎么样缓慢解决那几个问题吧?最后咱们就选取 rename 方法搭配简单的正则表明式,完成该任务:[4]

rename 's/.md.doc/.doc/' *

相关代码也早已写成 shell script 方式上传到 GitHub 库中.

  1. Python 3.5: str.split ↩

  2. 马克down写作进级:Pandoc入门浅谈 ↩

  3. shell 循环文件列表收取文件名 ↩

  4. Linux批量修改文件名艺术小结 ↩

本文由王中王开奖结果发布于网络编程,转载请注明出处:文档批量切割与转换,Python批量修改文件名

关键词:

上一篇:没有了
下一篇:没有了