将文件从公用目录移动到同名的不同文件夹

2024-09-25 02:30:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有文件夹1与文件“注1”,“注2”,“注3”。我想把这些移动到文件夹2与文件夹注1,注2和注3在它。例如,文件“Note 1”将转到文件夹2>;Note 1文件夹。我想写一段代码来识别文件夹1中文件中的单词“note1”,然后将“note1”放入文件夹2中的note1文件夹中。你知道吗

我对编码(尤其是Python)是新手。到目前为止,我还不知道如何让它识别“note1”/“note2”这个词。我知道有些命令可以识别单词的开头/结尾,但请记住,我给出的示例是我需要使用的简化版本:例如:“reg\u 001\u 0213\u0”word to recognize“\u cyc2.tif”


Tags: 文件代码命令gt版本文件夹示例编码
3条回答

检查字符串(文件名)中是否存在子字符串

if "Note 1" in filename: 

或者它可能有小写和大写字符

if "note 1" in filename.lower(): 

要将文件复制到另一个文件夹并保留其名称,可以使用

shutil.copy("old_directory/filename", "new_directory")

但是首先你必须创建一个不存在的文件夹

if not os.path.exists(new_directory):
    os.makedirs(new_directory)

在最新的Python中,您可以使用exist_ok=True,如果目录已经存在,它不会引发异常-因此您不必检查os.path.exists。你知道吗

os.makedirs(directory, exist_ok=True)

更多:标准模块shutilosos.pathpathlib


编辑:

获取文件夹中的名称

for filename in os.listdir(directory):
    print(filename)

将文件名连接到目录名

path = os.path.join(directory, filename)

path = os.path.join(directory1, directory2, filename)

使用pathlib

dir = pathlib.Path( directory )

path = dir / filename

path = dir / directory2 / filename

获取文件夹和子文件夹中的名称

for root, files, dirs in os.walk(directory):
    for filename in files:
        print(os.path.join(root, filename))

请尝试以下代码:

import os

OLD_DIR = './old'
NEW_DIR = './new'

for file_name in os.listdir(OLD_DIR):
    old_file = os.path.join(OLD_DIR, file_name)
    if file_name.count('_') != 4:
        print(f'ignoring {old_file}')
        continue
    _, _, _, token, _ = file_name.split('_')
    new_path = os.path.join(NEW_DIR, token)
    os.makedirs(new_path, exist_ok=True)
    new_file = os.path.join(new_path, file_name)
    print(f'moving {old_file} to {new_file}')
    os.rename(old_file, new_file)

输出

moving ./old/reg_001_0213_token1_cyc2.tif to ./new/token1/reg_001_0213_token1_cyc2.tif
moving ./old/reg_001_0213_token2_cyc2.tif to ./new/token2/reg_001_0213_token2_cyc2.tif
ignoring ./old/foo

请参见:

我假设您实际上是使用Python的os.listdir()os.scandir()获取文件名。你知道吗

文件名的格式是否总是reg_001_0213_<word to recognize>_cyc2.tif?如果是这样,您可以使用字符串的split()方法来“标记”文件名。返回一个较小字符串的列表,其中提供给split()的字符串用作分隔符。示例:

>>> fname = "reg_001_0213_<word to recognize>_cyc2.tif"
>>> tokens = fname.split("_")
>>> tokens
['reg', '001', '0213', '<word to recognize>', 'cyc2.tif']
>>> word_to_recognize = tokens[3]
>>> word_to_recognize
'<word to recognize>'

相关问题 更多 >