python 批量处理

我有一堆csv文件,每一个系列从kmeansN01__1到kmeansN01__180,有很多N01、N02等。我想求一个代码,可以根据文件名字中N01这样的序号自动生成一个文件夹,把他们序号下的文件输入到该文件夹,同时文件夹名称以该系列的N01、N02、N03等

img


这样命名

基于Monster 组和GPT的调写:
可以根据文件名中的序号自动生成文件夹,将对应的文件移动到文件夹中:

import os
import shutil

# 指定csv文件所在目录
csv_dir = '/path/to/csv/directory'

# 获取目录下所有的csv文件
csv_files = [f for f in os.listdir(csv_dir) if f.endswith('.csv')]

for csv_file in csv_files:
    # 获取csv文件名
    file_name = os.path.splitext(csv_file)[0]
    # 获取序号
    num = file_name.split('__')[1].split('_')[0]

    # 创建文件夹
    folder_name = f'N{num}'
    folder_path = os.path.join(csv_dir, folder_name)
    if not os.path.exists(folder_path):
        os.mkdir(folder_path)

    # 移动文件到文件夹
    file_path = os.path.join(csv_dir, csv_file)
    new_file_path = os.path.join(folder_path, csv_file)
    shutil.move(file_path, new_file_path)


将获取目录下所有以.csv结尾的文件,对于每个文件,它将从文件名中提取序号(例如,从kmeansN01__1.csv中提取01),然后创建一个名为N01的文件夹,并将具有相应序号的所有文件移动到该文件夹中。如果文件夹已经存在,则跳过创建步骤。


import os
import shutil

# 用于匹配文件名的关键字
series = ['N01', 'N02', 'N03']

# 搜索当前目录下所有csv文件
files = [f for f in os.listdir('.') if f.endswith('.csv')]

# 遍历所有文件
for f in files:
    # 获取文件名
    fname = os.path.splitext(f)[0]
    
    # 检查文件名中是否包含系列关键字
    for s in series:
        if s in fname:
            # 生成新目录名
            dirname = fname.split('__')[0] + '_' + s
            
            # 如果目录不存在,则创建
            if not os.path.exists(dirname):
                os.mkdir(dirname)
            
            # 移动文件到新目录
            shutil.move(f, os.path.join(dirname, f))
            
            # 处理完当前文件,跳出循环
            break

自动创建文件夹并将相应的文件移动到该文件夹中

import os
import shutil

# 读取所有的CSV文件
file_list = os.listdir('.')
csv_files = [f for f in file_list if f.endswith('.csv')]

# 遍历每一个CSV文件
for csv_file in csv_files:
    # 提取文件名和扩展名
    file_name, extension = os.path.splitext(csv_file)
    
    # 获取序号
    index = file_name[-2:]
    
    # 创建文件夹
    folder_name = f'kmeansN01_{index}'
    if not os.path.exists(folder_name):
        os.mkdir(folder_name)
    
    # 移动文件到文件夹中
    shutil.move(csv_file, os.path.join(folder_name, csv_file))


以下是一个Python脚本,可以根据文件名中的序号自动创建文件夹,并将具有相同序号的文件移动到该文件夹中:

import os
import shutil

# 指定包含CSV文件的目录
source_dir = '/path/to/csv/files/'

# 遍历目录中的所有文件
for file_name in os.listdir(source_dir):
    if file_name.endswith('.csv'):
        # 从文件名中提取序号
        series_number = file_name.split('__')[0][-3:]
        
        # 创建序号对应的文件夹
        series_dir = os.path.join(source_dir, 'N' + series_number)
        os.makedirs(series_dir, exist_ok=True)
        
        # 将文件移动到相应的文件夹中
        src_path = os.path.join(source_dir, file_name)
        dst_path = os.path.join(series_dir, file_name)
        shutil.move(src_path, dst_path)


这个脚本假设所有的CSV文件都在同一个目录下,并且文件名中包含一个以双下划线分隔的序号(例如kmeansN01__1.csv)。它遍历所有CSV文件,提取序号并在源目录下创建以序号命名的文件夹。然后它将具有相同序号的文件移动到相应的文件夹中。

以下是一个Python代码示例,可以根据文件名中的序号创建相应的文件夹,并将对应的文件移动到该文件夹中:

import os
import shutil

# 指定csv文件所在的文件夹路径
csv_dir = "/path/to/csv/folder"

# 遍历csv文件夹中的所有文件
for filename in os.listdir(csv_dir):
    if filename.endswith(".csv"):
        # 获取文件名中的序号,例如N01、N02等
        series_number = filename.split("__")[0][-3:]
        # 创建以序号命名的文件夹
        series_folder = os.path.join(csv_dir, series_number)
        if not os.path.exists(series_folder):
            os.mkdir(series_folder)
        # 将文件移动到相应的文件夹中
        src_file = os.path.join(csv_dir, filename)
        dst_file = os.path.join(series_folder, filename)
        shutil.move(src_file, dst_file)

请注意,在执行此代码之前,请确保备份所有文件,以防万一出现错误。此外,请确保在代码中正确指定csv文件所在的文件夹路径。
回答不易,还请能够采纳!!!

您可以使用Python编写一个脚本来实现这个功能。以下是一个可能的示例代码:

import os
import shutil

# 设置csv文件夹路径
csv_folder_path = '/path/to/csv/folder'

# 遍历csv文件夹中的文件
for file_name in os.listdir(csv_folder_path):
    # 只处理csv文件
    if not file_name.endswith('.csv'):
        continue
    
    # 获取文件名中的序号
    num_str = file_name.split('__')[0].replace('kmeansN', '')
    
    # 设置目标文件夹路径
    dest_folder_path = os.path.join(csv_folder_path, f'N{num_str}')
    
    # 如果目标文件夹不存在,创建它
    if not os.path.exists(dest_folder_path):
        os.makedirs(dest_folder_path)
    
    # 将文件移动到目标文件夹中
    src_file_path = os.path.join(csv_folder_path, file_name)
    dest_file_path = os.path.join(dest_folder_path, file_name)
    shutil.move(src_file_path, dest_file_path)

这个脚本会遍历指定的csv文件夹中的所有csv文件,获取文件名中的序号,并根据序号创建或打开一个以"N01"、"N02"等为名称的文件夹。然后,它会将每个文件移动到相应的文件夹中。请记得将/path/to/csv/folder替换为您的csv文件夹路径。

参考GPT和自己的思路,你可以使用Python的os和shutil模块来批量处理文件和文件夹。以下是可能的代码示例:

import os
import shutil

# 设置csv文件所在的目录路径
csv_dir = '/path/to/csv/files'

# 遍历目录中的文件
for filename in os.listdir(csv_dir):
    # 只处理csv文件
    if filename.endswith('.csv'):
        # 提取系列和序号
        series, num = filename.split('__')
        num, ext = os.path.splitext(num)
        
        # 创建文件夹
        folder = os.path.join(csv_dir, series+num)
        os.makedirs(folder, exist_ok=True)
        
        # 移动文件
        src = os.path.join(csv_dir, filename)
        dst = os.path.join(folder, filename)
        shutil.move(src, dst)

此代码将遍历指定目录中的所有CSV文件,并根据文件名中的系列和序号创建文件夹,然后将文件移动到对应的文件夹中。请根据你的具体情况进行适当修改。

实现代码:

import os
import shutil

root_path = r'C:\Users\username\Desktop\development\test\mf'

for root, dirs, files in os.walk(root_path):
    for file in files:
        sub_dir_name = str(file).split('kmeans')[1].split('__')[0]
        sub_path = os.path.join(root_path, sub_dir_name)

        if not os.path.exists(sub_path):
            print('创建子目录: ', sub_path)
            os.mkdir(sub_path)
        # 移动
        shutil.move(os.path.join(root_path, file), sub_path)

实现效果:

img

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
以下是一个Python脚本,可以实现自动创建文件夹并移动相应csv文件到对应文件夹的功能。假设csv文件都在当前目录下。

import os
import shutil

# 获取当前目录下的csv文件名
csv_files = [f for f in os.listdir('.') if os.path.isfile(f) and f.endswith('.csv')]

# 遍历csv文件
for f in csv_files:
    # 获取文件名(不包括扩展名)
    filename = os.path.splitext(f)[0]
    
    # 获取N01、N02等序号
    index = filename[-3:]
    
    # 创建以序号命名的文件夹
    folder_name = 'N' + index
    if not os.path.exists(folder_name):
        os.mkdir(folder_name)
    
    # 将该csv文件移动到对应的序号文件夹下
    shutil.move(f, os.path.join(folder_name, f))

在脚本执行结束后,当前目录下应该只有以N01、N02等命名的文件夹,每个文件夹下有对应序号的csv文件。注意:该脚本只考虑了文件名中最后三个字符是序号的情况,如果文件名中包含其他类似的字符,可能需要进行改动。
如果我的回答解决了您的问题,请采纳!