文字を置き換えて複数のファイルの名前を変更するにはどうすればよいですか?

2020-07-01 python python-3.x

次のようなファイル名のpdfファイルがたくさんあります。

  1. AuthorA_2014_これは良い記事です
  2. BIsanotherAuthor_1994_ Gr8 artcle
  3. CIsFatherOfB_1994_Minor記事ですが、悪くはありません

等々。ファイルの名前を次の形式に変更したいと思います。

  1. 著者A2014これは良い記事です
  2. BIsanotherAuthor1994Gr8アークル
  3. CIsFatherOfB1994マイナーな記事ですが、悪くはありません

Pythonでこれを行うにはどうすればよいですか?私はPythonの初心者レベルの知識を持っています。 ここから取得したコードを試してみました

import os
path =  os.getcwd()
filenames = os.listdir(path)
for filename in filenames:
    os.rename(filename, filename.replace("_", ""))

このコードを使用して、タイトルをAuthorA_2014_からAuthorA2014に変更できます。これはAuthorA2014に変更できます。これは、アンダースコアを削除する優れた記事ですが、年と記事のタイトルの間に空白を入れたくありません。どうすればこれを達成できますか?

Python 3.7.7を使用しています

Answers

これで完了です:

import os
path =  os.getcwd()
filenames = os.listdir(path)
for filename in filenames:
    os.rename(filename, filename.replace("_", "").replace("_ ", ""))

正規表現を使用して、オプションの末尾のスペースを持つ_を削除できます。

import re
import os
path =  os.getcwd()
filenames = os.listdir(path)
for filename in filenames:
    os.rename(filename, re.sub(r'_ ?', '', filename))
import re
import os
path =  os.getcwd()
files = os.listdir(path)
for file in files:
    os.rename(file, re.sub(r'_ ?', '', file))

pathlibの使用:

  • このモジュールは、さまざまなオペレーティングシステムに適したセマンティクスでファイルシステムパスを表すクラスを提供します。
  • t = Path.cwd() / 'test_foo_ bar.txt'作成されたpathlibオブジェクトがあるとします
    • すべての.pdfファイルを見つけるための.rglob
    • WindowsPath('E:/PythonProjects/stack_overflow/test_foo_ bar.txt')
    • t.stem'test_foo_ bar'
    • t.suffix'.txt'
    • t.parentWindowsPath('E:/PythonProjects/stack_overflow')
      • t.parent / 'new_name.txt'WindowsPath('E:/PythonProjects/stack_overflow/new_name.txt')
    • t.rename(...)はファイルの名前を変更します
from pathlib import Path

p = Path.cwd()  # for current working directory or Path('/some_path/files')
for file in p.rglob('*.pdf'):  # get all pdfs in all subdirectories
    new_file_name = file.stem.replace('_', '').replace('_ ', '') + file.suffix
    file.rename(file.parent / new_file_name)

Related