我正在寻找一个脚本来重命名我拥有的所有基于 .CSV 文件的 PDF 文件,并且它们需要匹配。
CSV 文件有这样的数字:
P20084579
P10092865
P10147356
P20154177
P10028030
P10058367
P10122918
P10122478
P20008810
P10029609
P20015658
PDF 文件的命名方式如下:
All_C_2017.1.pdf
All_C_2017.2.pdf
All_C_2017.3.pdf
All_C_2017.4.pdf
All_C_2017.5.pdf
All_C_2017.6.pdf
All_C_2017.7.pdf
All_C_2017.8.pdf
All_C_2017.9.pdf
All_C_2017.10.pdf
All_C_2017.11.pdf
等等,CSV 文件的第一个数字 (P20084579) 与 All_C_2017.1.pdf 等等,所以我想将所有这些数字重命名为 P20084579.pdf
我了解如何读取 CSV 文件和 glob
f = open('Test Names.csv', 'rb')
reader = csv.reader(f)
for row in reader:
print row[0]
pdf = glob.glob('*.pdf')
for pdfname in pdf:
print pdfname
我希望我可以用 OS.rename() 模块做一些事情来产生一个循环
os.rename(pdfname,row[0])
但是当我使用 GLOB 列出目录时 像这样列出,所以如果我尝试使用这种方法,它会错误地重命名文件:
All_C_2017.1.pdf
All_C_2017.10.pdf
All_C_2017.11.pdf
All_C_2017.2.pdf
All_C_2017.3.pdf
All_C_2017.4.pdf
All_C_2017.5.pdf
All_C_2017.6.pdf
All_C_2017.7.pdf
All_C_2017.8.pdf
All_C_2017.9.pdf
有什么建议吗?
最佳答案
只需 zip
(交错)两个结果(来自 glob.glob
和 csv.reader
)并在循环中重命名文件:
with open('Test Names.csv', 'r') as f:
for pdfname,row in zip(glob.glob('*.pdf'),csv.reader(f)):
os.rename(pdfname,row[0]+".pdf")
注意事项:
- 它可以使用智能解包
(new_basename,)
直接从 csv 文件中提取第一行(也是唯一一行),但它似乎存在更多列,所以算了吧。 - 如果.csv 文件的长度不够,重命名将停止。最好确保大小相等。该操作可能难以撤消。
安全(r)版本:
with open('Test Names.csv', 'r') as f:
pdfs = glob.glob('*.pdf')
reader = list(csv.reader(f))
if len(pdfs)!=len(reader):
raise Exception("Length mismatch")
for pdfname,row in zip(pdfs,reader):
os.rename(pdfname,row[0]+".pdf")
关于python - 使用 CSV 和 glob 重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41875632/