如何使用 Python 中文本文件的列表重命名一堆文件?
How do i rename a bunch of files with a list from a text file in Python?
我开始学习 Python,我正在做一个项目,从包含文件新名称的文本文件列表中重命名一堆文件。
在我的文件夹中有 lesson1.mp4
、lesson2.mp4
、lesson3.mp4
等文件。在文本文件中,我有新名称 1-newname
、2-newname
、3-newname
(用换行符分隔)。
首先,我更改目录并将变量存储在文件中,然后我使用 file.readlines()
逐行分隔。
import os
os.chdir(r"C:\Users\Samaritan\Documents\Python\
Ejercicios\pruebarenamefiles")
file = open('new_names.txt')
lines = file.readlines()
然后,我创建了一个函数来 return 根据列表的位置新名称。
def n_name(num):
return lines[num]
然后我遍历目录并使用函数 n_name
重命名每个位置
i = 0
for file in os.listdir():
if file != "new_names.txt":
os.rename(file, n_name(i))
i += 1
但是根本不管用。我收到 "OSError: [WinError 123]"
C:\Users\Samaritan\Documents\Python\Ejercicios\rename_files\venv\Scripts\python.exe C:/Users/Samaritan/Documents/Python/Ejercicios/rename_files/main.py
Traceback (most recent call last):
File "C:\Users\Samaritan\Documents\Python\Ejercicios\rename_files\main.py", line 16, in <module>
os.rename(file, n_name(i)) OSError: [WinError 123] El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos: 'Nuevo documento de texto - copia (2).txt'
-> '01 - Course Introduction\n'
Process finished with exit code 1
英文的意思是这样的:WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect:
报错信息说明问题,请仔细阅读。目标文件名末尾包含换行符,这在 Windows.
上是不允许的
要阅读没有换行符的行,请尝试
with open("new_names.txt") as file:
lines = [line.rstrip("\n") for line in file]
但是,使用单独的函数从列表中获取第 n
: 个对象也很奇怪;索引是列表的基本 built-in 方法。
files = os.listdir()
files.remove("new_names.txt")
for idx, filename in enumerate(files):
os.rename(filename, lines[idx])
同样,您可以 zip
这两个列表,如另一个答案中所建议的那样,但是您仍然必须先从输入列表中单独删除 new_names.txt
,就像上面的代码一样。
如果新名称像您的问题所暗示的那样单调,也许只是即时生成它们而不是将它们放入文件中。
idx = 1
for filename in os.listdir():
if file == "new_names.txt":
continue
os.rename(filename, f"{idx}-newname.txt")
idx += 1
如果您想对数字应用格式,请尝试例如f"{idx:02}-newname.txt"
强制索引号为两位数并用零填充。
我开始学习 Python,我正在做一个项目,从包含文件新名称的文本文件列表中重命名一堆文件。
在我的文件夹中有 lesson1.mp4
、lesson2.mp4
、lesson3.mp4
等文件。在文本文件中,我有新名称 1-newname
、2-newname
、3-newname
(用换行符分隔)。
首先,我更改目录并将变量存储在文件中,然后我使用 file.readlines()
逐行分隔。
import os
os.chdir(r"C:\Users\Samaritan\Documents\Python\
Ejercicios\pruebarenamefiles")
file = open('new_names.txt')
lines = file.readlines()
然后,我创建了一个函数来 return 根据列表的位置新名称。
def n_name(num):
return lines[num]
然后我遍历目录并使用函数 n_name
i = 0
for file in os.listdir():
if file != "new_names.txt":
os.rename(file, n_name(i))
i += 1
但是根本不管用。我收到 "OSError: [WinError 123]"
C:\Users\Samaritan\Documents\Python\Ejercicios\rename_files\venv\Scripts\python.exe C:/Users/Samaritan/Documents/Python/Ejercicios/rename_files/main.py
Traceback (most recent call last):
File "C:\Users\Samaritan\Documents\Python\Ejercicios\rename_files\main.py", line 16, in <module>
os.rename(file, n_name(i)) OSError: [WinError 123] El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos: 'Nuevo documento de texto - copia (2).txt'
-> '01 - Course Introduction\n'
Process finished with exit code 1
英文的意思是这样的:WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect:
报错信息说明问题,请仔细阅读。目标文件名末尾包含换行符,这在 Windows.
上是不允许的要阅读没有换行符的行,请尝试
with open("new_names.txt") as file:
lines = [line.rstrip("\n") for line in file]
但是,使用单独的函数从列表中获取第 n
: 个对象也很奇怪;索引是列表的基本 built-in 方法。
files = os.listdir()
files.remove("new_names.txt")
for idx, filename in enumerate(files):
os.rename(filename, lines[idx])
同样,您可以 zip
这两个列表,如另一个答案中所建议的那样,但是您仍然必须先从输入列表中单独删除 new_names.txt
,就像上面的代码一样。
如果新名称像您的问题所暗示的那样单调,也许只是即时生成它们而不是将它们放入文件中。
idx = 1
for filename in os.listdir():
if file == "new_names.txt":
continue
os.rename(filename, f"{idx}-newname.txt")
idx += 1
如果您想对数字应用格式,请尝试例如f"{idx:02}-newname.txt"
强制索引号为两位数并用零填充。