up date包含ID列表的多个文件的名称

时间:2016-03-15 13:54:54

标签: python format

我会有一个名为

的8000个文件夹

Phy000CVIC_YEAST.raw.fasta

Phy000CVID_YEAST.raw.fasta

另一个文件(ID.txt)包含ID为

Phy000CVKM YAL001C

Phy000CVKL YAL002W

我正在尝试用python更改文件ID(ID.txt)中的文件名,到目前为止我正在做什么

f = os.listdir(' / Users / admin / Desktop / folder')

f中的f:

if f.endswith('.clean.fasta'):

    ef=f.split('_')

    with open('ID.txt') as id:

        for i in id:

            i=i.split()

             if ef[0]==i[0]:

                 print(os.rename(f, i[1]))

我收到以下错误

追踪(最近一次呼叫最后一次):

文件"",第8行,

OSError:[Errno 2]没有这样的文件或目录

请指导,在哪里以及出于什么问题?

(PS:只有两个文件被重命名为8000plus)

1 个答案:

答案 0 :(得分:0)

你的分裂存在一些问题,你不能指望它们每次都返回一个长度为2的数组。此外,您没有在迭代中通过该文件夹找到正确的文件。我希望这可以让你开始走上正轨。我将ID重新组织成一个列表,这样您就不必在每次迭代时都读取ID.txt文件。

#First read the ID pairs into a reusable list
ids = []
with open('ID.txt', 'r') as f:
    for line in f:
        id = line.strip().split(" ", 1)
        ids.append(id)

files = os.listdir('/Users/admin/Desktop/folder')
for f in files:

    if f.endswith('.clean.fasta'):

        first, second = f.split('_', 1)

        for id in ids:

            #Check if the base names match and the yeast ID is not empty
            if id[0] == first and id[1]:

                #Rename using the updated yeast ID
                print(os.rename(f, "{0}_{1}.clean.fasta".format(first, id[1])))

我不能保证这对你有用,但是在你提供的微不足道的情况下,这是我能做的最好的事情。希望这会有所帮助。