簡體   English   中英

根據文本列表將文件移動到不同的文件夾 Python

[英]Move files into different folders based on a text list Python

我是 python 的新手,我一直在嘗試簡化我在日常工作中執行的手動任務,我有一個文本文件,其中包含由空行分隔的文件名列表,如下所示:

fileName1
fileName2 
fileName3
fileName4

fileName5
fileName6
fileName7
fileName8

fileName9
fileName10 
fileName11
fileName12  

所有這些文件都在一個文件夾中,我想找到每組文件並將它們移動到單獨的文件夾中,新文件夾的名稱應該是每個組的第一個文件的名稱。

我正在做我的研究,我發現如何使用osshutil模塊分別執行每個步驟,但我找不到將它們連接在一起並制作漂亮腳本的方法,我能從你們那里得到的任何幫助都會很棒, 謝謝!!

這是一個可以做到這一點的小腳本。 我做了兩個假設:

  1. 帶有文件列表的文件存儲在與源文件相同的目錄中
  2. 最后一個文件后有一個空行,因此腳本可以抓取最后一個組
import os
from shutil import move
from itertools import groupby

#Where the files are originally stored
src_path = "C:\\temp\\src\\"

#Where the group folders will go
dest_path = "C:\\temp\\dest\\"

#Open up the file containing the list of files
with open(src_path + "list_of_files.txt") as txt:
    lines = txt.readlines() #Read the file

    #Split the contents of the file based on the newline character "\n"
    i = (list(g) for _, g in groupby(lines, key='\n'.__ne__))
    list_of_groups = [a + b for a, b in zip(i, i)]

    #Iterate through each group
    for group in list_of_groups:
        folder_name = dest_path + group[0].replace("\n","") + "\\"
        
        if not os.path.exists(folder_name):
            #Create a folder for each group if it doesn't already exist
            os.mkdir(folder_name)
        
        #Move over each file in the group. The last element in the group is a newline character
        for file in group:
            if file != "\n":
                move(src_path + file.replace("\n",""),folder_name + file.replace("\n",""))

讀取文件時,您可以查找字符。 空格有一個換行符,由\n表示。

import os

filepath1 = os.getcwd() # current working directory
filepath2 = "path\\to\\where\\you\\want\\dir"
filename = os.path.join(filepath1,"yourfilename.txt") 
dirName = []
groupName = "filegroup"
idx = 1
newPath = ""
init = True
file = open(filename, "r")
for line in file:
    if init == True:  # initial folder
        newPath = os.path.join(filepath2,groupName + str(idx))
        os.mkdir(newPath)
        dirName.append(groupName)
        init = False
            
    if line == "\n":  # line in file is empty
        idx += 1
        newName = groupName + str(idx)
        dirName.append(newName)
        newPath = filepath2 + dirName[idx-1]
        os.mkdir(newPath)   
    else:
        os.mkdir(os.path.join(newPath,line.rstrip())) 

file.close()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM