python中copy文件后重命名为后缀是系统时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中copy文件后重命名为后缀是系统时间相关的知识,希望对你有一定的参考价值。

参考技术A '''python中copy文件后重命名为后缀是系统时间'''
# -*- coding:utf-8 -*-
from time import (strftime,localtime,time);
import shutil;
import os;

suffix_name=input("suffix=")#e.g.suffix=txt;
newfile_name="".join(strftime("%Y_%m_%d_%H_%M_%S.",localtime(time()))+suffix_name);

newfile_path=os.path.join(os.getcwd()+"/"+newfile_name);
#print(newfile_name);
#print(newfile_path);
shutil.copy(__file__,newfile_path)#将当前文件复制重命名后存储;

with open(newfile_path,"r",encoding="utf8") as f:#打开新复制的文件;
text=f.read()#句首缩进4格,获取文本内容;
print(f"复制文件内容如下:\ntext")#句首缩进4格,打印内容;

如何将文件重命名为子目录

【中文标题】如何将文件重命名为子目录【英文标题】:how to rename files to sub directory 【发布时间】:2017-03-25 10:35:41 【问题描述】:

我正在尝试使用它们所在的子目录标签重命名子目录中的所有 .wav 文件。 Fox 示例 directory/sub-directory1/ 1_1.wavdirectory/sub-directory1/ sdir1_1.wav 。我知道如何在 python 中重命名文件,但我无法遍历子目录然后添加标签。 虽然下面的代码可以对齐子目录和文件,但它不会循环遍历所有文件,因为如果文件多于目录,for dire in dirs: 将不起作用

 import os

    rootdir = r'C:\Users\test'

    for subdir, dirs, files in os.walk(rootdir):

        for dire in dirs:
          for file in files:
           filepath = subdir+os.sep+file

           if filepath.endswith('.wav'):
             print (dire+ file) 

【问题讨论】:

os.walk 不能那样工作。文件和目录上的循环不能嵌套。您能否更具体地说明您想要实现的目标? 我有一个文件夹,里面有十几个子文件夹。在所有子文件夹中都有一些 .wav(文件)。这些 .wav 文件是随机命名的,并不系统。所以,我想做的是用子目录的名称重命名这些文件并增加例如:subdir1.wav、subdir2.wav 等等。基本上试图将子目录的引用添加到wave文件中。我希望我清楚吗? 为此我需要遍历子目录并重命名文件,然后转到另一个子目录并重命名这些文件等等。 您的意思是 sub-directory2/ 1.wavsub-directory2/ sdir2_1.wav 吗?请重新阅读您的问题并对其进行编辑以更清晰。 @choman 我知道这是一个例子,但是当人们试图提供帮助时它会混淆。首先,您说要重命名文件名,然后在您的示例中,您还要重命名目录。你明白我的意思吗? 【参考方案1】:

我已经测试过了,它可以工作。

import shutil
import os
from glob import glob

# Define your source folder.
source_dir = 'F:\\Test\\in\\'
# Define your target folder.
target_dir = 'F:\\Test\\out\\'
# Define the file extension you want to search for.
file_ext = '*.mp4'
# use glob to create a list of files in your source DIR with teh desired extension.
file_check = glob(source_dir + file_ext)


# For each item in file_check shuttle will copy teh source file and write it renamed to your target location.
for i in file_check:

    shutil.copy(i, target_dir + 'dir_out_' + os.path.basename(i)) 
    #os.path.basename gives us just the filename and extension minus the absolute path.
    #i,e test123456.mp4

这里是目标目录的内容:

F:\Test\out\dir_out_test_10.mp4
F:\Test\out\dir_out_test_2.mp4
F:\Test\out\dir_out_test_3.mp4
F:\Test\out\dir_out_test_4.mp4
F:\Test\out\dir_out_test_5.mp4
F:\Test\out\dir_out_test_6.mp4
F:\Test\out\dir_out_test_7.mp4
F:\Test\out\dir_out_test_8.mp4
F:\Test\out\dir_out_test_9.mp4

如果您想进行文件系统移动而不是复制,请查看shutil 和glob,请使用shutil.move() 而不是shutil.copy()

编辑:

Python 3.5+

这是在根目录中查找所有文件的方法:

glob('F:\\test\\**\\*.mp4', recursive=True)

这将找到根目录和子文件夹中的所有文件,然后您可以使用上面的shutil方法对它们进行您想要的操作。

【讨论】:

感谢您的帮助。在您的代码中,source_dir = 'F:\\Test\\in\\' 仅指向一个文件夹,因此所有 .wav 文件都必须在此文件夹中,但在我的情况下,'F:\\Test\\in\\' 下有许多子文件夹,例如 'F:\\Test\\in\\sub_folder1''F:\\Test\\in\\sub_folder2' 等。因此,我需要在文件夹内循环查找子文件夹。我不确定您的回答是否符合我的要求,或者我可能没有理解。请解释是否可以通过 glob 实现?即遍历子文件夹?【参考方案2】:

经过一些试验和错误,我能够达到结果。

 import os

    rootdir = r'C:\Users\test'

    for dirpath, dirnames, filenames in os.walk(rootdir):

        for file in filenames:
         filepath = dirpath +os.sep+file
         if filepath.endswith('wav'):
                 # split directory filepath
                 split_dirpath = dirpath.split(os.sep)
                 # take the name of the last directory which I want to tag
                 dir_tag = (split_dirpath[-1])
                 # wasn't necessary to split the extension, still....
                 f_name, f_ext = (os.path.splitext(file))
                 # add the tag of the sub dir
                 f_name= dir_tag +'_'+ f_name
                 # create the new file name
                 new_name = f_name +f_ext
                 print(new_name)
                 os.rename(filepath,dirpath+os.sep+new_name)

【讨论】:

以上是关于python中copy文件后重命名为后缀是系统时间的主要内容,如果未能解决你的问题,请参考以下文章

图片文件的文件名后缀名替换后正常打开图片使用吗?

如何将文件重命名为另一个文件系统?

在 Pandas 中合并数据后重命名列

使用 .groupby() 后重命名列的问题

暴力删除文件.

如何将文件重命名为子目录