如何在python上读取具有相似名称的文件,将其重命名然后使用它们?

时间:2019-07-18 12:20:39

标签: python

我已经在此处发布了相同的问题,但可悲的是我无法提出解决方案(即使你们中的一些人给了我很棒的答案,但大多数不是我想要的),因此,我将重试,这次将提供有关我要执行的操作的更多信息。

因此,我正在使用一个名为GMAT的程序来获取一些输出(带有数字值的.txt文件)。这些输出具有不同的名称,但是由于我将它们用于多种用途,因此得到了类似的信息:

GMATd_1.txt
GMATd_2.txt
GMATf_1.txt
GMATf_2.txt

现在,我需要做的就是将这些输出用作代码中的输入。我需要在脚本的其他功能中使用它们,并且由于我将拥有许多这些.txt文件,因此我想重命名它们,因为我不想像'./path/etc'这样使用它们。

所以我想要编写一个循环,该循环可以获取这些文件并在脚本内重命名它们,以便可以在其他函数(循环外)中以新名称使用这些文件。

所以不必单独进行此操作:

GMATds1= './path/GMATd_1.txt'
GMATds2= './path/GMATd_2.txt'

我想写一个循环来帮我。

我已经尝试使用字典:

import os
import fnmatch

dict = {}

for filename in os.listdir('.'):
    if fnmatch.fnmatch(filename, 'thing*.txt'):
        examples[filename[:6]] = filename

这确实有效,但是我不能在循环外使用字典键。

3 个答案:

答案 0 :(得分:1)

如果我的理解正确,则您尝试获取名称相似的文件(至少是重复出现的模式)并重命名它们。这可以通过以下代码完成:

import glob
import os

all_files = glob.glob('path/to/directory/with/files/GMAT*.txt')
for file in files:
    new_path = create_new_path(file) # possibly split the file name, change directory and/or filename
    os.rename(file, new_path)

glob library允许使用*通配符搜索文件,因此可以搜索具有特定模式的文件。它列出了某个目录中的所有文件(如果包含*通配符作为目录,则列出多个目录)。遍历文件时,您可以直接使用文件的输入(很显然您打算这样做),也可以按此代码段所示重命名它们。要重命名它们,您需要生成一个新路径-因此您必须编写create_new_path函数,该函数采用旧路径并创建一个新路径。

答案 1 :(得分:1)

从python 3.4开始,您应该使用内置的pathlib软件包,而不要使用osglob

from pathlib import Path
import shutil

for file_src in Path("path/to/files").glob("GMAT*.txt"):
    file_dest = str(file_src.resolve()).replace("ds", "d_")
    shutil.move(file_src, file_dest)

答案 2 :(得分:0)

您可以使用

import os
path='.....' # path where these files are located
path1='.....' ## path where you want these files to store
i=1
for file in os.listdir(path):
    if file.endswith(end='.txt'):
        os.rename(path + "/" + file, path1 + "/"+str(i) + ".txt")   
    i+=1

它将源文件夹中的所有txt文件重命名为1,2,3,.... n.txt