ホームページ  >  記事  >  バックエンド開発  >  BatとPythonでファイル名を一括変更する実装

BatとPythonでファイル名を一括変更する実装

高洛峰
高洛峰オリジナル
2017-03-02 16:18:381615ブラウズ

最近、Web サイトからドキュメントのバッチをダウンロードしましたが、ファイルには数値文字列が付けられていました (多くのライブラリはこのようなものです)。これらのファイルをダウンロードしたので、これらのファイルのリストも作成できました。ファイルを 1 つずつ配置して名前を変更しましょう。インターネットからこれらのスクリプトを見つけました。

1. Bat スクリプトを使用します (Windows システムではデフォルトで利用可能)

メモ帳を開き、これらのコードをメモ帳に書き込み、xx.bat ファイルとして保存します (サフィックス名に注意してください。多くの初心者は xx として保存します。 but .txt、txt が非表示になっているので、機能しないと思いました)

@echo off
for /r “d:\pdf” %%a in (*.pdf) do (
  for /f “tokens=1,2 delims= ” %%b in (1.txt) do ( 
  if “%%~nxa”==”%%b” ren “%%a” “%%c.pdf”
  )
)

では、ファイルを d:/pdf フォルダーに配置する必要があり、ファイルのサフィックスは .pdf、ファイル リストは1.txt の下に配置され、txt は Microsoft として保存されます。 内部コンテンツの形式は次のとおりです。

ts001003.pdf 世界科学技術百冊パノラマ (3) 現代テクノロジー
ts001004.pdf 世界科学技術百冊パノラマ(4) 蒸気機関がもたらした革命
ts001005.pdf 世界科学技術百冊パノラマ(5) 現代技術

必要に応じて適宜修正可能。


2. Python スクリプトを使用します (Windows システムでは、Python 3.50 コンパイル ソフトウェア (約 30M) をインストールする必要があります。Linux では、Python を 3.50 にアップグレードする必要があると推定されています)

このスクリプトは、私が数時間かけて書いたスクリプトです (ただし、私はそれを学びました。私は長い間プログラミングをしてきましたが、良いものを流暢に書くのはまだ困難です)
メモ帳を開き、これらのコードをメモ帳に書き込み、xx.bat ファイルとして保存します (多くの初心者はサフィックス名に注意してください) xx.bat として保存します。txt は非表示になっているため、機能しないと思いました)

#!/bin/env python
# -*- coding: utf-8 -*-
"""从某网站下载了一批文档,但是文件是用数字串命名的文档(很多图书馆都这样吧),
也有文档列表,所以写了一个脚本来重命名批文件

"""
__author__ = 'rublog'
import os

#1.txt文档要求每个文档一行,保存的时候必须为ANSI格式,前面是列表文档名含后缀(就是网站上文件名,一串数字
#或者字母什么的),空一格,然后是文档的真名(不带后缀)
#get_list这个从1.txt文本文件中一行一行的读取文件,去掉换行符,然后调用doc_rename
#函数
def get_list():
  #尝试不同的编码来自知乎 十五
  #http://www.php.cn/
  decode_list=["utf-8",'gb18030', 'ISO-8859-2','gb2312',"gbk","Error" ]#编码集
  #GBK不如GB18030覆盖得好,容易出错,故首先尝试GB18030。
  for k in decode_list:#编码集循环
    try:
      book_list = open('1.txt', encoding=k)
      #打开路径中的文本
      line = book_list.readline()
      while line:
        if os.name == 'nt':
          line = line.strip('\r\n')
        else:
          line = line.strip('\n')
        doc_rename(line)
        line = book_list.readline()
      break#打开路径成功跳出编码匹配
    except:
      if k == "Error":#如果碰到这个程序终止运行
        print("had no way to decode")
        raise Exception("%s had no way to decode"%directions)
      continue
#重命名,构造完整的路径和后缀
def doc_rename(book_list_line):
  try:
    name_list = book_list_line.split(' ')
    list_name = name_list[0]
    cool_list = list_name.split('.')
    ext = cool_list[-1]
    current_folder = os.getcwd()
    real_name = name_list[1]
    real_name = os.path.join(current_folder, real_name)
    real_name_ext = real_name+'.'+ext
    os.rename(os.path.join(current_folder, list_name), real_name_ext)
    print('success')
  except:
    pass
  return 0
#据说高手都会写的主函数
if __name__ == '__main__':
  get_list()

では、ファイルを通常のフォルダーに配置する必要があり、ファイルのサフィックスは任意です (サフィックスは必須です)。 txt のリスト サフィックスと同じである必要があります)、ファイル リストは 1.txt に配置されます。以下では、txt を Microsoft のデフォルトの ANSI 形式または BOM 形式なしの UTF として保存するだけです。内部コンテンツ形式は次のとおりです。


ts001003.pdf 世界科学技術パノラマ百巻 (3) 現代のテクノロジー

ts001004.pdf 世界科学技術パノラマ百巻 (4) 蒸気機関がもたらした革命

ts001005.pdf世界科学技術パノラマ百巻 (5) 現代技術

1.txt 文書には文書ごとに 1 行が必要で、保存するときは ANSI または ANSI である必要があります。 UTF には BOM 形式がありません。他の形式でもテストできます。


先頭は、サフィックス(つまり、Web サイト上のファイル名、数字 # または文字などの文字列)、空白スペース、そしてドキュメントの実際の名前(サフィックスなし)を含むドキュメント名のリストです。


bat および python でのファイル名のバッチ変更の実装に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。