gpt4 book ai didi

python:我可以将基于部分名称的文件移动到具有该名称的文件夹中吗

转载 作者:行者123 更新时间:2023-12-02 04:43:20 25 4
gpt4 key购买 nike

我有一个包含大量文件的目录,我想根据部分文件名将这些文件移动到文件夹中。我的文件列表如下所示:

  • ID1_geneabc_species1.fa

  • ID1_genexy_species1.fa

  • ID2_geneabc_species1.fa

  • ID3_geneabc_species2.fa

  • ID3_genexy_species2.fa

  • ID4_genexy_species3.fa

我想根据文件名的最后部分(species1、species2、species3)将我拥有的文件移动到单独的文件夹中。文件名的第一部分并不总是有相同数量的数字和/或字母,但总是分为 3 个部分,用下划线“_”分隔。

这是我在网上试过的,但是没有用:

import os
import glob

dirs = glob.glob('*_*')

files = glob.glob('*.fa')

for file in files:
name = os.path.splitext(file)[0]
matchdir = next(x for x in dirs if name == x.rsplit('_')[0])
os.rename(file, os.path.join(matchdir, file))

我在下面的脚本列表中有名称列表(物种 1、物种 2、物种 3),它们对应于我的文件名的第三部分。我能够根据这些名称中的每一个在我当前的工作目录中创建一组目录。在以下脚本之后是否有更好的方法来执行此操作,例如遍历物种列表,匹配文件,然后将其移动到正确的目录中?谢谢。

from Bio import SeqIO
import os
import itertools

#to get a list of all the species in genbank file
all_species = []
for seq_record in SeqIO.parse("sequence.gb", "genbank"):
all_species.append(seq_record.annotations["organism"])

#get unique names and change from set to list
Unique_species = set(all_species)
Species = list(Unique_species)

#send to file
f = open('speciesnames.txt', 'w')
for names in Species:
f.write(names+'\n')
f.close()

print ('There are ' + str(int(len(Species))) + ' species.')

#make directory for each species
path = os.path.dirname(os.path.abspath(__file__))
for item in itertools.product(Species):
os.makedirs(os.path.join(path, *item))

最佳答案

因此,您需要一个函数,它从文件中获取文件夹名称。然后你遍历文件,创建不存在的目录并将文件移动到那里。诸如此类的事情应该会解决。

def get_dir_name(filename):
pos1 = filename.rfind('_')
pos2 = filename.find('.')
return filename[pos1+1:pos2]

for f in glob.glob('*.fa'):
cwd = os.getcwd()
dir_name = cwd+'/'+get_dir_name(f)
print dir_name
if not os.path.exists(dir_name):
os.mkdir(dir_name)
os.rename(f, dir_name+'/'+f)

关于python:我可以将基于部分名称的文件移动到具有该名称的文件夹中吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35510922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com