Python:根据csv文件中的条目对文件进行排序的程序
我正在尝试根据csv文件对文件进行排序。但该文件包含许多同名的ID。如果目录中已经存在同名文件,是否有方法将同名文件移动到一个文件夹或在文件前面添加一个数字Python:根据csv文件中的条目对文件进行排序的程序,python,csv,Python,Csv,我正在尝试根据csv文件对文件进行排序。但该文件包含许多同名的ID。如果目录中已经存在同名文件,是否有方法将同名文件移动到一个文件夹或在文件前面添加一个数字 import os, unicodecsv as csv # open and store the csv file IDs = {} with open('labels.csv','rb') as csvfile: timeReader = csv.reader(csvfile, delimiter = ',') # bu
import os, unicodecsv as csv
# open and store the csv file
IDs = {}
with open('labels.csv','rb') as csvfile:
timeReader = csv.reader(csvfile, delimiter = ',')
# build dictionary with associated IDs
for row in timeReader:
IDs[row[0]] = row[1]
# move files
path = 'train/'
tmpPath = 'train2/'
for oldname in os.listdir(path):
# ignore files in path which aren't in the csv file
if oldname in IDs:
try:
os.rename(os.path.join(path, oldname), os.path.join(tmpPath, IDs[oldname]))
except:
print 'File ' + oldname + ' could not be renamed to ' + IDs[oldname] + '!'
实际上,我想将所有id与golden_retreiver相对应的文件移动到一个文件夹中,以此类推 根据您的描述,以下是我的方法:
Example-
id name
001232131hja1.jpg golden_retreiver
0121221122ld.jpg black_hound
0232113222kl.jpg golden_retreiver
0213113jjdsh.jpg alsetian
05hkhdsk1233a.jpg black_hound
笔记
- 对于数据文件中的每一行,我都在目标位置创建一个繁殖目录。我使用set
确保每个目录只创建一次seen
- 在那之后,将文件移动到适当的位置是一件琐事
- 一个可能的移动错误:源目录中不存在文件。在这种情况下,代码只是打印出错误并忽略它
os.path.join(tmpPath,id[oldname],oldname))
非常感谢您,先生,您刚刚度过了我的一天非常感谢!我遇到了一个更为棘手的问题,代码非常完美:)
import csv
import os
SOURCE_ROOT = 'train'
DEST_ROOT = 'train2'
with open('labels.csv') as infile:
next(infile) # Skip the header row
reader = csv.reader(infile)
seen = set()
for dogid, breed in reader:
# Create a new directory if needed
if breed not in seen:
os.mkdir(os.path.join(DEST_ROOT, breed))
seen.add(breed)
src = os.path.join(SOURCE_ROOT, dogid + '.jpg')
dest = os.path.join(DEST_ROOT, breed, dogid + '.jpg')
try:
os.rename(src, dest)
except WindowsError as e:
print e