Python 将特定文件从特定子目录移动到新目录中

Python 将特定文件从特定子目录移动到新目录中,python,shell,csv,Python,Shell,Csv,如何仅将特定子目录(不是所有子目录)中的某些文件(不是所有文件)移动到新目录中 需要移动的文件已列在CSV文件中,数量约为85000。他们已经提到了他们的绝对路径。所有文件都具有相同的扩展名,即.java。特定子目录的数量约为13000 是否有Python脚本(首选)或Shell脚本来执行此操作 注意:我搜索的论坛返回了关于如何将单个子目录中的所有文件移动到新目录的解决方案。具体如下: 这样的东西可能适合你: import os import csv def move_file(old

如何仅将特定子目录(不是所有子目录)中的某些文件(不是所有文件)移动到新目录中

需要移动的文件已列在CSV文件中,数量约为85000。他们已经提到了他们的绝对路径。所有文件都具有相同的扩展名,即
.java
。特定子目录的数量约为13000

是否有Python脚本(首选)或Shell脚本来执行此操作

注意:我搜索的论坛返回了关于如何将单个子目录中的所有文件移动到新目录的解决方案。具体如下:


  • 这样的东西可能适合你:

    import os
    import csv
    
    def move_file(old_file_path, new_directory):
        if not os.path.isdir(new_directory):
            os.mkdir(new_directory)
        base_name = os.path.basename(old_file_path)
        new_file_path = os.path.join(new_directory, base_name)
        os.rename(old_file_path, new_file_path)
    
    def parse_csv_file(csv_path):
        csv_file = open(csv_path)
        csv_reader = csv.reader(csv_file, delimiter=',', quotechar='"')
        paths = list(csv_reader)
        csv_file.close()
        return paths
    
    if __name__ == '__main__':
        old_file_paths = parse_csv_file('your_csv_path')
        for old_file_path in old_file_paths:
            move_file(old_file_path, 'your_new_directory')
    

    这假设您的CSV文件只包含路径,路径由逗号分隔,并且所有这些文件都存在

    这样的东西可能适合你:

    import os
    import csv
    
    def move_file(old_file_path, new_directory):
        if not os.path.isdir(new_directory):
            os.mkdir(new_directory)
        base_name = os.path.basename(old_file_path)
        new_file_path = os.path.join(new_directory, base_name)
        os.rename(old_file_path, new_file_path)
    
    def parse_csv_file(csv_path):
        csv_file = open(csv_path)
        csv_reader = csv.reader(csv_file, delimiter=',', quotechar='"')
        paths = list(csv_reader)
        csv_file.close()
        return paths
    
    if __name__ == '__main__':
        old_file_paths = parse_csv_file('your_csv_path')
        for old_file_path in old_file_paths:
            move_file(old_file_path, 'your_new_directory')
    

    这假设您的CSV文件只包含路径,路径由逗号分隔,并且所有这些文件都存在

    假设您的CSV文件如下所示:

    George,/home/geo/mtvernon.java,Betsy
    Abe,/home/诚实/gettys.java,Mary
    
    您可以使用以下shell命令移动文件:

    $cut-d,-f2
    假设您的CSV文件如下所示:

    George,/home/geo/mtvernon.java,Betsy
    Abe,/home/诚实/gettys.java,Mary
    
    您可以使用以下shell命令移动文件:

    $cut-d,-f2
    1)创建这些特定目录的列表2)在其上循环3)将这些特定文件(或仅*.java)移动到您的目标。您能否提供一个CSV文件的示例?它是否包含您正在移动的文件/目录的绝对路径以及它们需要移动到的位置的绝对路径?CSV文件仅包含1列(没有标题)。第一行:/home/shaw/Documents//Dataset/ANT/Repository/ChangedMethodFiles/bab9e2d799ee887bc0a404b4acdec0366234eafe/930587b01d54c1800f7cde3695b86d06.java其余行与此行类似,只有最后两个实体发生了更改(即实际的java文件和包含它的文件夹)。它包含我正在移动的文件/目录的绝对路径,但不包含它们需要移动到的绝对路径。忽略“文档”后面的双斜杠,它实际上是一个单斜杠。1)创建这些特定目录的列表2)在其上循环3)移动这些特定文件(或仅*.java)您能提供一个CSV文件的示例吗?它是否包含您正在移动的文件/目录的绝对路径以及它们需要移动到的位置的绝对路径?CSV文件仅包含1列(没有标题)。第一行:/home/shaw/Documents//Dataset/ANT/Repository/ChangedMethodFiles/bab9e2d799ee887bc0a404b4acdec0366234eafe/930587b01d54c1800f7cde3695b86d06.java其余行与此行类似,只有最后两个实体发生了更改(即实际的java文件和包含它的文件夹)。它包含我正在移动的文件/目录的绝对路径,但不是它们需要移动到的绝对路径。忽略“文档”后的双斜杠,它实际上是一个单斜杠。我的csv文件的前3行(/home/shaw/Desktop/shaw_AntUnderstand.csv)像这样:/home/shaw/Documents/Dataset/ANT/Repository/ChangedMethodFiles/bab9e2d799ee887bc0a404b4acdec036/7b01d54c1800f7cde36956d06.java/home/shaw/Documents/Dataset/ANT/Repository/ChangedMethodFiles/20AB59BFF57796A7E1CDFEFBC29826E/f132a91640114b9d51804dd7.java/home/shaw/Documents/Dataset/ANT/Repository/ChangedMethodFiles/8CE1DA042105BF437C3273/b2933bb3d32ef7d12d5f40a.javaI运行以下命令:shaw@shaw-XPS-8700:~/Desktop$cut-d,-f1len(旧文件路径)是否产生了一个合理的值。当我尝试运行此操作时,“CSV文件中提到的文件”和“旧路径中提到的所有文件”之间没有进行比较。i、 e(整个旧文件夹被移动到新目录中;而不仅仅是旧文件夹中的特定文件)。我遗漏了什么吗?试着运行第一行,看看
    len(旧文件路径)
    是否产生了一个合理的值。