我编写了一个脚本,该脚本读入两列.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])
提前感谢您的时间。
答案 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]