我已经在此处发布了相同的问题,但可悲的是我无法提出解决方案(即使你们中的一些人给了我很棒的答案,但大多数不是我想要的),因此,我将重试,这次将提供有关我要执行的操作的更多信息。
因此,我正在使用一个名为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
这确实有效,但是我不能在循环外使用字典键。
答案 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
软件包,而不要使用os
或glob
。
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