【问题标题】:Python to rename files in a folder with matching name in CSV filePython在CSV文件中重命名具有匹配名称的文件夹中的文件
【发布时间】:2021-05-24 14:49:11
【问题描述】:

我正在尝试编写一个脚本,它将一个 asp 文件块重命名为正确的名称。

目前我有一个文件夹,其中包含 asp 文件,名称为 id1.asp、id2、asp 等。

我有一个 CSV 文件,其中包含 ID 和该 ID 的描述。

id1, pen
id2, rubber
id3, paper
etc.

我正在研究如何将id1.asp 重命名为pen.aspid2.asprubber.asp 等等。

谢谢。这是我迄今为止尝试过的:

import csv
import os
import shutil

a_csv_file = open("skuconvert.csv", "r")
dict_reader = csv.DictReader(a_csv_file)
for row in a_csv_file:
        print (row)

ordered_dict_from_csv = list(dict_reader)[0]
dict_from_csv = dict(ordered_dict_from_csv)

print(dict_from_csv)
dirs = os.listdir('./')

path = ''
head_tail = os.path.split(path)

【问题讨论】:

  • 到目前为止您尝试过什么?如果您发布一些代码并告诉我们失败的地方会很有帮助。
  • 对不起,我已经尝试了几种我在这里找到的解决方案:这是我尝试过的一种:import os for old, new in zip(df['sku_Old'], df['desc_New']) : os.rename(old, new) 这是另一个: import os import csv import shutil with open('skuconvert.csv','rt') as csvfile: timeReader = csv.reader(csvfile, delimiter = ',') i = 0 for row in timeReader: if i > 0: start_loc = row[1] save_loc = row[0] shutil.copy('start_location/{}'.format(start_loc), 'save_location/{}'.format(save_loc )) i+=1
  • 您的 CSV 文件是否有标题行?还是只是id1,pen
  • 现在没有,但我可以添加一个。我已经用我最新的编辑编辑了上面的代码,它递归地查看了所有行

标签: python asp.net csv rename


【解决方案1】:

您可以使用CVS Reader 读取文件名并创建一个dictionary id 到新文件名的映射。然后你可以使用os.listdir()os.path.splitext()shutil.move() 来重命名你的文件。

【讨论】:

  • import csv import os import shutil a_csv_file = open("skuconvert.csv", "r") dict_reader = csv.DictReader(a_csv_file) ordered_dict_from_csv = list(dict_reader)[0] dict_from_csv = dict(ordered_dict_from_csv ) print(dict_from_csv) dirs = os.listdir('./') path = '' head_tail = os.path.split(path) source = './' destination = './' 感谢指点。到目前为止,我有这个。我可以将 csv 读入一个数组,但在重命名时遇到了困难。
【解决方案2】:

您可以使用glob.glob() 查找文件夹中的所有 ASP 文件。首先将您的 CSV 文件作为字典加载(假设有两列,ID 和名称)。如果有更多列或有标题,则需要以不同方式处理。

import glob
import csv 
import os 
import shutil 

with open("skuconvert.csv") as f_input:
    csv_input = csv.reader(f_input)
    ids = dict(csv_input)

asp_files = glob.glob(r"f:\dropbox\python temp\*.asp")

for asp_file in asp_files:
    path, basename = os.path.split(asp_file)
    filename, ext = os.path.splitext(basename)
    
    if filename in ids:
        new_name = os.path.join(path, f'{ids[filename]}{ext}')
        print(f"Renaming: '{asp_file}' to '{new_name}'")
        
        try:
            shutil.move(asp_file, new_name)
        except:
            print(f"Unable to rename: {new_name}")
    else:
        print(f"ID unknown: {filename}")

然后对于找到的每个 ASP 文件,拆分路径和扩展名,并确定是否在 CSV 文件中找到了 ID。如果是,则构建新文件名并调用shutil.move() 重命名文件。如果不是,则打印未知文件。

【讨论】:

  • 这太接近了。它处理了 5 个文件,然后出错: Traceback(最近一次调用最后一次):文件“C:\Users\Adam\AppData\Local\Programs\Python\Python39\lib\shutil.py”,第 803 行,在移动 os.rename(src, real_dst)
  • 文件是否在另一个应用程序的某处打开?您可以在调用周围添加 try except 块以跳过有问题的文件。可能是目标文件已经存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
相关资源
最近更新 更多