我的子目录中有数百个文件需要重命名,然后移动到 csv 列中指定的新位置(路径取决于 ID 和参考 ID)。我需要首先在原始位置重命名文件,因为有些文件可能具有相同的文件名(例如 new_reqest_11_02_01.pdf)。
当前结构+文件名:
A/new_reqest_11_02_01.pdf
B/new_reqest_11_02_01.pdf
B/new_reqest_11_03_01.pdf
所需结构+文件名:
A/123456/A_F_11_02_01.pdf
B/123964/B_R_11_02_01.pdf
B/158964/B_G_11_02_01.pdf
文件名和路径将使用 csv 中的列创建:
客户 | 请求ID | 旧文件名 | 类型 | 日期 |
---|---|---|---|---|
A | 123456 | new_reqest_11_02_01.pdf | F | 11_02_01 |
B | 123964 | new_reqest_11_03_01.pdf | R | 11_02_01 |
我可以移动所有文件并重命名它们,但这不起作用,因为同名的文件被覆盖。我已经尝试从另一个问题(成功)创建目录树,但是对 csv 列的引用来重命名文件并创建新路径却难住了我。
import os
import csv
with open('C:\\Users\\me\\Desktop\\Testing\\Rename_Refile.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter = ',')
header = next(readCSV)
for row in readCSV:
dirname = "/".join((row[0], row[1], row[2]))
if not os.path.exists(dirname):
os.makedirs(dirname)
我尝试将其他东西混在一起。跨 stackoverflow 的代码,但它太脱节了,我无法找到有关使用 csv 列更改文件路径的问题。
如有任何帮助,我们将不胜感激!
经过更多实验,我从另一个问题修改了以下代码。
import os
import pandas as pd
df = pd.read_csv("C:\\Users\me\Desktop\Testing\Rename_refile.csv','rb'")
for i, sub_dir in enumerate(df["sub_directories"]):
old_path = os.path.join("C:\\Users\me\Desktop\Testing\NewDirectory", sub_dir)
new_path = os.path.join("C:\\Users\me\Desktop\Testing\OldDirectory",df["new_sub_directories"][i])
old_name = df["OriginalFileName"][i]
new_name = df["NewFileName"][i]
os.rename(os.path.join(old_path, old_name), os.path.join(new_path, new_name))
这会重命名原始子目录中的文件,然后应该将该文件移动到创建的新目录树中的新路径。但我一直得到
FileNotFoundError: [Errno 2] No such file or directory
...