基于.csv文件重命名文件。循环通过字典作为指南

时间:2014-05-11 22:28:21

标签: python loops csv dictionary

我编写了一个脚本,该脚本读入两列.csv文件,将其转换为字典,然后将其用作重命名目录中文件的指南。如果文件与指南字典中的键匹配,则将其重命名为该值。问题是它只重命名一个文件然后停止;它不会遍历我的指南字典。它重命名一个文件然后停止。 Python和stackoverflow的新手,所以欢迎任何反馈。

目录只是一个文件列表

Barcode85.fq
Barcode73.fq
Barcode61.fq
Barcode86.fq

.csv文件的结构如下,其中第一列是我想要的新文件名,而secodn“条形码”现在是文件名:

wtcother1.3.4.fq, Barcode85.fq
wtcother2.fq, Barcode73.fq
wtcother6.fq, Barcode61.fq
wtcother6.fq, Barcode86.fq
ect.

创建的字典如下所示:

['wtcother1.3.4.fq', 'Barcode85.fq']
['wtcother2.fq', 'Barcode73.fq']
['wtcother6.fq', 'Barcode61.fq']
['wtcmbr1.4.6.fq', 'Barcode86.fq']
ect.

脚本如下:

import os
import csv

# make an empty dictionary which will hold the keys
keys = {}

#open file
with open('lane1Key.csv','rU') as csvfile:
        reader = csv.reader(csvfile, delimiter = ',', quotechar='"')
# build a dictionary with the associated ids
        for rowDict in reader:
              keys[ rowDict[0] ] = rowDict[1]
              print rowDict
# renaming
for fileName in os.listdir('.'):
    if fileName in rowDict:
        os.rename(fileName, rowDict[0])

提前感谢您的时间。

2 个答案:

答案 0 :(得分:0)

你不需要遍历所有文件,只需要浏览字典中的文件:

for k in keys:
    os.rename(k, keys[k])

请注意,您可能混淆了第一列和第二列

答案 1 :(得分:0)

我建议

# renaming
for fileName in ( os.listdir('.') & keys.keys() ):
    os.rename(fileName, keys[fileName])

这将迭代找到的文件与csv中定义的文件的交集。

如果你不能改变csv文件中列的顺序,你需要适应:

# build a dictionary with the associated ids
        for rowDict in reader:
              keys[ rowDict[1] ] = rowDict[0]