删除目录中所有 txt 文件名的最后 10 个字符 (Python)

Deleting last 10 characters of all txt file names in a directory (Python)

目前一个目录下的文件名有'test1_1_4302929399.txt', 'test1_2_903929029.txt', 'test1_3_3949492929.txt',如何删除该目录下文件名的后10位,使最后的是 'test1_1.txt'、'test1_2.txt' 等 在 python 中?我试过:

"""

import os

with open(filename, 'rb+') as filehandle:
    filehandle.seek(-1, os.SEEK_END)
    filehandle.truncate()

"""

但这并不适用于所有文件,因为它们的命名方式不同。非常感谢!

试试这个。使用 os.rename

import os
path1=....
for i in os.listdir(path1):
    os.rename(os.path.join(path1, i),os.path.join(path1, i[:8])+'.txt')

您可以使用 glob 模块遍历不同的文件,并使用 * 通配符替换最后 10 个字符。

from glob import glob
import os

for file_name in glob(directory + "/test_*.txt"):   # Directory specifies path to the file if needed
    base = os.path.basename(file_name) # returns test_*.txt for each file
    os.rename(file_name, directory + base[:7] + '.txt')

创建所有文件名的列表,然后将它们拆分为“_”字符并将前两部分连接回一个字符串,然后在后面添加 .txt。

import os

file_names = ["test1_1_4302929399.txt", "test1_2_903929029.txt", "test1_3_3949492929.txt"]

for filename in file_names:
    os.rename(filename, '_'.join(f.split('_')[0:2]+'.txt'))

os.rename() 函数的签名是:

os.rename(src, dest)
src: path to source file or directory to rename
dest: path to destination path or directory (new)

请注意,如果目的地已经存在,您将收到 OSError


如果文件列表不合适,那么可以使用 os 模块中的 listdir:

import os

path_to_files = './files'

for file in os.listdir(path_to_files):
    os.rename(file, '_'.join(file.split('_')[0:2]+'.txt'))

在这种情况下,在“_”上使用拆分变得很有用,因为 testx_y 中的数字 x 和 y 变得比一个字符长。