Как изменить название файла python

В этой статье мы на простых примерах разберем, как работать с файлами в Python (вывод списка файлов, переименование, удаление, чтение, запись)

В любом проекте разработки ПО нам приходится работать с файлами. При помощи Python можно осуществлять довольно много операций. Мы можем:

  • выводить список файлов
  • перемещать и переименовывать файлы
  • удалять файлы
  • читать файлы
  • записывать в файлы
  • добавлять что-либо в файлы

Наверняка можно делать что-то еще, но это те базовые операции, которые мы разберем в этой статье.

Чтобы сэкономить время и лучше изложить материал, я сгруппировал некоторые темы.

Вывод списка файлов и их переименование

В этом разделе я покажу вам, что можно делать при помощи модуля os в Python. Если вы гик вроде меня и хотите иметь возможность переименовывать файлы в соответствии с определенными правилами, Python вам поможет.

Для начала нам нужно получить список всех файлов. После этого мы будем выбирать файлы по одному и переименовывать.

[python_ad_block]

Как получить список файлов в Python

Насколько я знаю, в модуле os нет специального метода, который возвращал бы имена только файлов. Поэтому, получив список файлов и директорий, нам придется отсеять директории. Для этого мы можем воспользоваться методом os.path.isfile() из модуля os. Этот метод возвращает True, если аргумент является файлом. Аналогично, метод os.path.isdir() возвращает True, если аргумент является директорией.

import os

# returns name of all files & directory exist in current location
files_dir = os.listdir('./blogs')
print(files_dir)

only_files = []
for i in files_dir:
    if os.path.isfile('./blogs/'+i):
        only_files.append(i)

only_dir = []
for i in files_dir:
    if os.path.isdir('./blogs/'+i):
        only_dir.append(i)

print('-'*15)
print(only_files) # prints all files
print('-'*15)
print(only_dir) # prints all directories

"""
OUTPUT:
['1.txt', '2.txt', '3.txt', '4.txt', '5.txt', '6.txt', '7.txt', '8.txt', 'Test Directory 1', 'Test Directory 2']
---------------
['1.txt', '2.txt', '3.txt', '4.txt', '5.txt', '6.txt', '7.txt', '8.txt']
---------------
['Test Directory 1', 'Test Directory 2']
"""

Итак, мы получили список всех файлов.

Как переименовать файлы в Python

Чтобы переименовать файлы, мы воспользуемся методом rename() и применим его к каждому файлу. Предположим, мы хотим добавить к файлам префиксы «Odd» (нечетный) и «Even» (четный), основываясь на индексах.

# only_files is a list of all files in the blogs directory

for index, file_name in enumerate(only_files):
    if index % 2 == 0:
        os.rename('./blogs/'+file_name, './blogs/'+'Even-'+file_name)
    else:
        os.rename('./blogs/'+file_name, './blogs/'+'Odd-'+file_name)

Здесь метод enumerate() возвращает номер по счетчику (начинается с 0) и значение из итератора (only_files). Мы проверяем, является ли индекс (номер по счетчику) четным, и если да — добавляем префикс «Even» к имени файла. В противном случае добавляем префикс «Odd».

Подробнее о функции enumerate() можно почитать в статье «Как работает функция enumerate() в Python?».

Вероятно, синтаксис метода os.rename() вы поняли, но на всякий случай приведу его:

os.rename(текущее_имя, новое_имя)

При использовании этого метода имена (пути) можно писать как целиком, так и в относительном формате (главное — написать правильно). В нашем случае я написал «./blog/». Вторая косая черта указывает на вход внутрь директории blogs. Таким образом, путь к файлу превращается в «./blogs/1.txt».

Чтобы переместить файл, мы можем воспользоваться модулем os или модулем shutil. Я покажу перемещение файла при помощи метода rename() из модуля os.

Синтаксис rename() тот же, только в качестве второго аргумента указывается путь к целевому файлу с именем самого файла.

os.rename(исходное_местонахождение, целевое_местонахождение)

Вероятно, это звучит запутано, но пример вам все объяснит:

import os

os.rename('./blogs/1.txt', './blogs/Test Directory 1/1.txt')

os.rename('./blogs/2.txt', './blogs/Test Directory 2/1.txt')

Итак, в первом методе rename мы берем файл 1.txt из директории blogs и перемещаем его в директорию Test Directory 1, которая является поддиректорией blogs.

Во втором сценарии мы берем файл 2.txt и тоже перемещаем его в директорию Test Directory 1, но с именем 1.txt. Да, мы перемещаем и переименовываем файл одновременно. Если вы немного знакомы с командами Linux, вы могли заметить что работа метода os.rename() напоминает работу команды mv в Linux.

А как нам теперь удалить эти файлы?

Нам снова поможет модуль os. Мы воспользуемся методом remove(). Допустим, мы хотим удалить файл 3.txt из директории blogs. Для этого напишем следующий код:

import os

os.remove('./blogs/3.txt')

Чтение файлов и запись в них

Чтобы выполнить любую из операций чтения и записи, нам нужно сделать три основных шага:

  1. Открыть файл
  2. Выполнить операцию
  3. Закрыть файл

Мы можем проделывать эти шаги, используя два паттерна. Объяснить их на словах сложно, так что я сделаю это при помощи кода.

# Открыть файл
file = open('./blogs/1.txt', 'r', encoding="UTF-8")

# Выполнить операцию
data = file.read()
print(data)

# Закрыть файл
file.close()

"""
OUTPUT:

Python 101 Series
"""

Здесь мне нужно было открыть файл, выполнить операцию и закрыть файл вручную. Для открытия файла Python предоставляет метод open(). Синтаксис:

open(файл, режим_доступа, кодировка)

Файл — это местонахождение объекта файла. Режим_доступа представляет режим, в котором мы хотим открыть файл. Вообще можно делать больше одной операции за раз, но об этом позже. Кодировка представляет формат кодировки, в которой мы хотим работать с файлом. Этот параметр опционален. Чаще всего используется UTF-8.

Второй паттерн:

with open('./blogs/1.txt', 'r', encoding="UTF-8") as file:
    data = file.read()
    print(data)

Здесь мы используем паттерн контекстного менеджера. Если быть кратким, паттерн контекстного менеджера используется для разумного расходования ресурсов. Проблема первого паттерна в том, что мы можем забыть закрыть файл. В нашем примере это не слишком важно, но если вы оперируете тысячами или даже миллионами файлов, подобная ошибка повлияет на вашу систему. Паттерн контекстного менеджера освобождает ресурсы, как только мы покончили с задачей.

От редакции Pythonist. О контекстных менеджерах можно почитать в статье «Контекстные менеджеры в Python».

Итак, в первой строке мы открываем файл при помощи синтаксиса with open() и присваиваем его переменной file. Мы могли бы сделать то же самое, написав file = open(). Преимущество нашего варианта в том, что Python автоматически освободит этот ресурс после третьей строки.

Поскольку после третьей строки мы окажемся вне контекста with open(), все ресурсы, связанные с переменной file, будут освобождены. Вы будете часто встречать паттерны контекстных менеджеров в коде для обработки файлов в продакшен-системах.

Помимо чтения, мы можем записывать файлы и дополнять их новыми данными. Делается это аналогично. То есть, чтобы записать данные в файл, мы пишем следующий код:

with open('./blogs/temp.txt', 'w', encoding="UTF-8") as file:
    data = "Python 101 Series"
    file.write(data)

Если файл с таким именем существует, он будет перезаписан новыми данными. А если такого файла нет, он будет создан и в него будут записаны данные. При этом следует учитывать, что создается только новый файл, директория создана не будет. Если я напишу open(«./blogs/temp/temp.txt», «w»), код выбросит ошибку, потому что внутри директории blogs нет директории temp.

Чтобы данные в файле не перезаписывались, а дополнялись, можно воспользоваться методом append (в коде — аргумент 'a'). Он добавляет данные в конец открытого файла.

with open('./blogs/temp.txt', 'a') as file:
    data = "n New Python 101 Series"
    file.write(data)

В этом коде сперва Python проверит, существует ли файл temp.txt, затем откроет его и добавит «n New Python 101 Series» в конец файла. Если файл не существует, Python его создаст и запишет в него эту строку.

Режимы доступа к файлам

Я собрал базовые режимы доступа к файлам в таблице. Но есть и другие режимы, позволяющие оперировать бинарными данными и в бинарном формате. Полный список можно посмотреть в статье «File Access mode In Python».

Режим Объяснение
r чтение
w запись
a добавление в файл
r+ Чтение и запись данных в файл. Предыдущие данные в файле не удаляются.
w+ Запись и чтение данных. Существующие данные перезаписываются.
a+ Добавление и чтение данных из файла. Существующие данные не перезаписываются.

Заключение

В этой статье мы на простых примерах разобрали, как работать с файлами в Python. Я знаю, что запомнить все это за один раз сложно. Но это и не нужно: все придет с практикой, главное — разобраться.

Перевод статьи «File Handling in Python».

  1. HowTo
  2. Python How-To’s
  3. Переименовать файл в Python
  1. Переименуйте файл в Python с помощью os.rename()
  2. Переименуйте файл в Python с помощью shutil.move()

Переименовать файл в Python

Если вы хотите переименовать файл в Python, выберите один из следующих вариантов.

  1. Используйте os.rename(), чтобы переименовать файл.
  2. Используйте shutil.move(), чтобы переименовать файл.

Переименуйте файл в Python с помощью os.rename()

Функцию os.rename() можно использовать для переименования файла в Python.

Например,

import os

file_oldname = os.path.join("c:\Folder-1", "OldFileName.txt")
file_newname_newfile = os.path.join("c:\Folder-1", "NewFileName.NewExtension")

os.rename(file_oldname, file_newname_newfile)

В приведенном выше примере

file_oldname — старое имя файла.

file_newname_newfile — новое имя файла.

Результат:

  1. Файл с именем file_oldname переименовывается в file_newname_newfile.
  2. Содержимое, которое присутствовало в file_oldname, будет найдено в file_newname_newfile.

Предварительные условия:

  • Импортировать модуль os.
  • Будьте в курсе текущего каталога.

    Если исходный / целевой файл не существует в текущем каталоге, в котором выполняется код, укажите абсолютный или относительный путь к файлам.

  • Исходный файл должен существовать. В противном случае отображается следующая ошибка.
    [WinError 2] The system cannot find the file specified
    
  • Целевой файл не должен существовать. В противном случае отображается следующая ошибка —
    [WinError 183] Cannot create a file when that file already exists
    

Переименуйте файл в Python с помощью shutil.move()

Функцию shutil.move() также можно использовать для переименования файла в Python.

Например,

import shutil

file_oldname = os.path.join("c:\Folder-1", "OldFileName.txt")
file_newname_newfile = os.path.join("c:\Folder-1", "NewFileName.NewExtension")

newFileName=shutil.move(file_oldname, file_newname_newfile)

print ("The renamed file has the name:",newFileName)

В приведенном выше примере

file_oldname: старое имя файла.

file_newname_newfile: новое имя файла.

Результат:

  1. Файл с именем file_oldname переименовывается в file_newname_newfile.
  2. Содержимое, которое было в file_oldname, теперь будет найдено в file_newname_newfile.
  3. Возвращаемое значение — newFileName, то есть новое имя файла.

Предварительные условия:

  • Импортировать модуль shutil как,
  • Будьте в курсе текущего каталога.

    Если исходный / целевой файл не существует в текущем каталоге, в котором выполняется код, укажите абсолютный или относительный путь к файлам.

  • Исходный файл должен существовать. В противном случае отображается следующая ошибка —
    [WinError 2] The system cannot find the file specified.
    
  • Если целевой файл уже существует, ошибка не отображается. Кроме того, если в конечном файле присутствовало какое-либо содержимое, оно перезаписывается содержимым исходного файла.

Сопутствующая статья — Python File

  • Как получить все файлы каталога
  • Как удалить файл и каталог на Python
  • Как добавить текст к файлу в Python
  • Как проверить, существует ли файл на Python
  • Как найти файлы с определенным расширением только на Python
  • Откройте zip-файл, не распаковывая его в Python

Ezoic

In this tutorial, you will learn how to rename files and folders in Python.

After reading this article, you’ll learn: –

  • Renaming a file with rename() method
  • Renaming files that matches a pattern
  • Renaming all the files in a folder
  • Renaming only the files in a list
  • Renaming and moving a file

Table of contents

  • Steps to Rename File in Python
    • Example: Renaming a file in Python
    • os.rename()
  • Rename a file after checking whether it exists
  • Rename Multiple Files in Python
    • Renaming only a list of files in a folder
  • Renaming files with a timestamp
  • Renaming files with a Pattern
  • Renaming the Extension of the Files
  • Renaming and then moving a file to a new location
  • Practice Problem: Renaming an image file

Steps to Rename File in Python

To rename a file, Please follow these steps:

  1. Find the path of a file to rename

    To rename a file, we need its path. The path is the location of the file on the disk.
    An absolute path contains the complete directory list required to locate the file.
    A relative path contains the current directory and then the file name.

  2. Decide a new name

    Save an old name and a new name in two separate variables.
    old_name = 'details.txt'
    new_name = 'new_details.txt'

  3. Use rename() method of an OS module

    Use the os.rename() method to rename a file in a folder. Pass both the old name and a new name to the os.rename(old_name, new_name) function to rename a file.

Example: Renaming a file in Python

In this example, we are renaming “detail.txt” to “new_details.txt”.

import os

# Absolute path of a file
old_name = r"E:demosfilesreportsdetails.txt"
new_name = r"E:demosfilesreportsnew_details.txt"

# Renaming the file
os.rename(old_name, new_name)

Output:

Before rename

Before renaming a file
before renaming a file

After rename

After renaming a file
After renaming a file

os.rename()

As shown in the example, we can rename a file in Python using the rename() method available in the os module. The os module provides functionalities for interacting with the operating systems. This module comes under Python’s standard utility modules.

os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)

The following are the parameters that we need to pass for the os.rename() method

  • src : Path for the file that has to be renamed
  • dst : A destination path for the newly renamed file
  • src_dir_fd : (Optional) Source file directory
  • dst_dir_fd : (Optional) Destination file directory

Note: If the dst already exists then the FileExistsError will be thrown in Windows and in the case of UNIX an OSError will be thrown.

Rename a file after checking whether it exists

The os.rename() method raises the FileExistsError or OSError when the destination file name already exists. This can be avoided by wrapping our code in the try-except block.

Use the isfile(‘path’) function before renaming a file. It returns true if the destination file already exists.

We can use the following two approaches to continue with renaming by removing the old file or stop without renaming it.

  1. Use os.path.isfile() in an if condition
  2. Write rename code in the try-except block.

Example 1: Use os.path.isfile()

import os

old_name = r"E:demosfilesreportsdetails.txt"
new_name = r"E:demosfilesreportsnew_details.txt"

if os.path.isfile(new_name):
    print("The file already exists")
else:
    # Rename the file
    os.rename(old_name, new_name)

Output

The file already exists

Example 2: The same code could be wrapped in the try-except block as below.

import os

old_name = r"E:demosfilesreportsdetails.txt"
new_name = r"E:demosfilesreportsnew_details.txt"

# enclosing inside try-except
try:
    os.rename(old_name, new_name)
except FileExistsError:
    print("File already Exists")
    print("Removing existing file")
    # skip the below code
    # if you don't' want to forcefully rename
    os.remove(new_name)
    # rename it
    os.rename(old_name, new_name)
    print('Done renaming a file')

Output:

File already Exists
Removing existing file
Done renaming a file

Rename Multiple Files in Python

Sometimes we need to rename all files from a directory. Consider a folder with four files with different names, and we wanted to rename all file names.

We can rename multiple files in a folder using the os.rename() method by following the below steps.

  • Get the list of files in a directory using os.listdir(). It returns a list containing the names of the entries in the given directory.
  • Iterate over the list using a loop to access each file one by one
  • Rename each file

The following example demonstrates how to change the names of all the files from a directory.

import os

folder = r'E:demosfilesreports\'
count = 1
# count increase by 1 in each iteration
# iterate all files from a directory
for file_name in os.listdir(folder):
    # Construct old file name
    source = folder + file_name

    # Adding the count to the new file name and extension
    destination = folder + "sales_" + str(count) + ".txt"

    # Renaming the file
    os.rename(source, destination)
    count += 1
print('All Files Renamed')

print('New Names are')
# verify the result
res = os.listdir(folder)
print(res)

Output

All Files Renamed
New Names are
['sales_0.txt', 'sales_1.txt', 'sales_2.txt', 'sales_3.txt']
After renaming all files
After renaming all files

Renaming only a list of files in a folder

While renaming files inside a folder, sometimes we may have to rename only a list of files, not all files. The following are the steps we need to follow for renaming only a set of files inside a folder.

  • Providing the list of files that needs to be renamed
  • Iterate through the list of files in the folder containing the files
  • Check if the file is present in the list
  • If present, rename the file according to the desired convention. Else, move to the next file

Example:

import os

files_to_rename = ['sales_1.txt', 'sales_4.txt']
folder = r"E:demosfilesreports\"

# Iterate through the folder
for file in os.listdir(folder):
    # Checking if the file is present in the list
    if file in files_to_rename:
        # construct current name using file name and path
        old_name = os.path.join(folder, file)
        # get file name without extension
        only_name = os.path.splitext(file)[0]

        # Adding the new name with extension
        new_base = only_name + '_new' + '.txt'
        # construct full file path
        new_name = os.path.join(folder, new_base)

        # Renaming the file
        os.rename(old_name, new_name)

# verify the result
res = os.listdir(folder)
print(res)

Output

['sales_1_new.txt', 'sales_2.txt', 'sales_3.txt', 'sales_4_new.txt']

Renaming files with a timestamp

In some applications, the data or logs will be stored in the files regularly in a fixed time interval. It is a standard convention to append a timestamp to file name to make them easy for storing and using later. In Python, we can use the datetime module to work with dates and times.

Please follow the below steps to append timestamp to file name:

  • Get the current timestamp using a datetime module and store it in a separate variable
  • Convert timestamp into a string
  • Append timestamp to file name by using the concatenation operator
  • Now, rename a file with a new name using a os.rename()

Consider the following example where we are adding the timestamp in the “%d-%b-%Y” format .

import os
from datetime import datetime

# adding date-time to the file name
current_timestamp = datetime.today().strftime('%d-%b-%Y')
old_name = r"E:demosfilesreportssales.txt"
new_name = r"E:demosfilesreportssales" + current_timestamp + ".txt"
os.rename(old_name, new_name)

Renaming files with a Pattern

Sometimes we wanted to rename only those files that match a specific pattern. For example, renaming only pdf files or renaming files containing a particular year in their name.

The pattern matching is done using the glob module. The glob module is used to find the files and folders whose names follow a specific pattern.

We can rename files that match a pattern using the following steps: –

  • Write a pattern using wildcard characters
  • Use a glob() method to find the list of files that matches a pattern.
  • Iterate through the files in the folder
  • Change the name according to the new naming convention.

Example: Rename all text files starting with the word “sales” inside the “reports” folder with the new name “revenue” and a counter.

import glob
import os

path = r"E:demosfilesreports\"
# search text files starting with the word "sales"
pattern = path + "sales" + "*.txt"

# List of the files that match the pattern
result = glob.glob(pattern)

# Iterating the list with the count
count = 1
for file_name in result:
    old_name = file_name
    new_name = path + 'revenue_' + str(count) + ".txt"
    os.rename(old_name, new_name)
    count = count + 1

# printing all revenue txt files
res = glob.glob(path + "revenue" + "*.txt")
for name in res:
    print(name)

Output

E:demosfilesreportsrevenue_1.txt
E:demosfilesreportsrevenue_2.txt

Renaming the Extension of the Files

We can change only the extension of the files using the rename() method. This is done by getting the list of the files and then get only the file name using the splitext() method of the os module.

This method returns the root and extension separately. Once we get the root/base of the filename, we can add the new extension to it while renaming it using the rename() method

Use the below steps to rename only extension: –

  • Get List file names from a directory using a os.listdir(folder)
  • Next, Iterate each file from a list of filenames
  • Construct current file name using os.path.join() method by passing file name and path
  • Now, use the replace() method of a str class to replace an existing extension with a new extension in the file name
  • At last, use the os.rename() to rename an old name with a new name

Let’s see the example.

import os

folder = r"E:demosfilesreports\"
# Listing the files of a folder
print('Before rename')
files = os.listdir(folder)
print(files)

# rename each file one by one
for file_name in files:
    # construct full file path
    old_name = os.path.join(folder, file_name)

    # Changing the extension from txt to pdf
    new_name = old_name.replace('.txt', '.pdf')
    os.rename(old_name, new_name)

# print new names
print('After rename')
print(os.listdir(folder))

Output

Before rename
['expense.txt', 'profit.txt', 'revenue_1.txt', 'revenue_2.txt']
After rename
['expense.pdf', 'profit.pdf', 'revenue_1.pdf', 'revenue_2.pdf']

Renaming and then moving a file to a new location

With the help of the rename() method we can rename a file and then move it to a new location as well. This is done by passing the new location to the rename() method’s dst parameter.

Consider the below example where we are defining two different folders as the source and destination separately. Then using the rename() method, we are changing the name and the location of the file.

Finally when we print the files in the new location we can see the file in the list.

import glob
import os

# Old and new folder locations
old_folder = r"E:demosfilesreports\"
new_folder = r"E:demosfilesnew_reports\"

# Old and new file names
old_name = old_folder + "expense.txt"
new_name = new_folder + "expense.txt"

# Moving the file to the another location

os.rename(old_name, new_name)

Practice Problem: Renaming an image file

We can rename any file in a folder and files of any type using the os.rename(). In the below example we will change the name of an image file inside the folder.

import os
import glob

folder = "/Users/sample/eclipse-workspace/Sample/Files/Images/"
for count, filename in enumerate(os.listdir(folder)):
    oldname = folder + filename   
    newname = folder + "Emp_" + str(count + 1) + ".jpg"
    os.rename(oldname, newname)

# printing the changed names
print(glob.glob(folder + "*.*"))

Output

['/Users/sample/eclipse-workspace/Sample/Files/Images/Emp_2.jpg', '/Users/sample/eclipse-workspace/Sample/Files/Images/Emp_1.jpg'] 

In this article we have covered the basics of renaming a file, the method used for renaming. We also saw how to rename a file with a particular pattern, naming all the files in a folder and adding a date to the file. We also with example how to change the extension of the file and how to move a file to a new location after changing the name.

Понравилась статья? Поделить с друзьями:
  • Как изменить название файла pdf на телефоне
  • Как изменить название стим аккаунта
  • Как изменить название статуса у кая
  • Как изменить название статуса кай
  • Как изменить название ссылки тильда