如何使用csv文件的值重命名文件

时间:2017-01-14 14:05:09

标签: python python-2.7 csv

已更新 我有一个'Images'文件夹,在这个文件夹中有2个名为18和19的子文件夹

内部文件夹18& 19有一些名为'final.png'的图像

我有一个location.csv文件

数字纬度经度名称

18,6.984719398,79.86861158,xyz

19,6.984719398,79.87759469,abc

问题:我想将名称从'final.png'转换为6.984719398_79.86861158_final.png

如何编写python脚本或任何其他程序来完成此任务?

这是我试过的代码

import os
import pandas as pd
import csv

df = pd.read_csv("names.csv")
for i, sub_dir in enumerate(df["number"]):
    img_path = os.path.join("images", sub_dir)
    new_name = df["latitude"][i] + '_' + df["longitude"][i]+"_final.png"
    os.rename(os.path.join(img_path, "final.png"),
              os.path.join(img_path, new_name))

3 个答案:

答案 0 :(得分:1)

这应该有效,假设你安装了pandas库(http://pandas.pydata.org/):

import os
import pandas as pd

df = pd.read_csv("file.csv")
for i, sub_dir in enumerate(df["sub_directories"]):
    img_path = os.path.join("Images", sub_dir)
    new_name = df["filenames"][i] + "_final.png"
    os.rename(os.path.join(img_path, "final.png"), os.path.join(img_path, new_name))

请注意,此代码会重命名文件,但不会将其复制到其他位置。它还假定csv的子目录列具有名称“sub_directories”,文件名列具有名称“filenames”

答案 1 :(得分:0)

所以首先,我会在没有大熊猫的情况下开始这样做。看起来使用pandas会导致错误。

试试这个:

student_dict = {}
with open(file.csv, 'r') as f:
  for line in f:
  l = line.split(',')
    student_dict[l[0]] = l[1]

此时,您将有一个(字符串 - 这是重要的)学生数字作为键,并将匹配的名称作为值。

现在我们可以遍历您的文件夹并重命名该文件。

for dir in [name for name in os.listdir(a_dir) if os.path.isdir(os.path.join(current_path, name))]: #this ugly line generates all subdirs in your current dir
  new_name = student_dict[dir] + "_final.png"
  os.rename(os.path.join(img_path, "final.png"), os.path.join(img_path, new_name))

答案 2 :(得分:0)

<强>解

嗨,这是简单的解决方案

#!/usr/bin/python    
import os
import csv

myfile  = open('names.csv', "rb")
reader = csv.reader(myfile)
path="/home/images/"

rownum = 0
for row in reader:
    # Save header row.
    if rownum == 0:
        header = row //I put this line just to skip it
    else:
        oldPath=path+row[0]+'/'+"final.png"
        newPath=oldPath+row[3]+'_'+"final.png" 
        os.rename(oldPath,newPath) 
    rownum += 1

myfile.close()

解释

正如我在问题中解释的那样,我有'images'文件夹,我把它保存在'路径变量'上。我还有一个name.csv,我把它保存在'myFile'变量中。在循环的第二次迭代中(在标题之后)

row [0] = 18 so oldPath =“/ home / images / 18 / final.png”

row [3] =“abc”所以newPath =“/ home / images / 18 / abc_final.png”

因此在os.rename()函数之后,文件名将在两个文件夹中变为abc_final.png。

如果您觉得这很有帮助,请提出我的问题并回答:)