已更新 我有一个'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))
答案 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。
如果您觉得这很有帮助,请提出我的问题并回答:)