我正在从在线存储库下载大量PDF文档,但它们没有通过正确的命名约定。这些文件与我在Excel电子表格中找到的名称列表对齐。
我想要做的是导入Excel电子表格,将名称分配给变量,然后使用os.rename()重命名我已批量下载的文件以匹配我的列表。
当我下载.PDF时,每个都有一个随机的命名约定,而不是由URL命名。每次选择链接时都会随机生成这些内容。这是一个问题,因为我无法按正确的顺序对文档进行排序,以便按正确的顺序命名。
我想要做的是按照"创建日期"对文档进行排序。通过使用sleep(),我按正确的顺序下载文档,与仪器编号匹配,但我无法弄清楚如何正确排列它们以迭代我想要更改的名称。
以下是我的代码示例:
#Import packages
import pandas as pd
from selenium import webdriver
import os
#Designate file locations / destinations
file = '/Users/username/Desktop/test.xlsx'
directory = '/Users/username/Downloads'
#Obtain instrument names
xl = pd.ExcelFile(file)
df1 = xl.parse('Sheet1', parse_cols=[2], names=['instrument'])
names = df1.instrument
prefix = xyz
#Obtain file location
imported_files = os.listdir(directory)
imported_files.remove('.DS_Store')
df1['importedFiles'] = imported_files
print(df1)
instrument importedFiles
0 146169-1975 2461030_123.PDF
1 147235-1975 2461030_2027.PDF
2 148367-1975 2461030_348.PDF
3 149563-1975 2461030_5327.PDF
4 171413-1977 2461030_555.PDF
5 186305-1977 2461030_5969.PDF
6 186726-1977 2461030_7610.PDF
7 186727-1978 2461030_7878.PDF
8 187748-1978 2461030_8733.PDF
#Set working directory
os.chdir('/Users/username/Downloads')
#Set a loop to rename
for x, y in zip(names, os.listdir('/Users/username/Downloads')):
file_name, file_ext = os.path.splitext(y)
new_names = ('{}_{}{}'.format(prefix, x, file_ext))
print(new_names)
os.rename(y, new_names)
sleep(0.5)
当我打印" new_names"名称的顺序在我的控制台中正确显示。但是,当我采取下一步实际重命名文件时,由于来自导入文件的随机生成的名称,重命名不起作用。
如何确保文件名的更改顺序与它们进入的顺序相同?或者我如何更改文件的顺序,以便在我命名时,它们与仪器字符串的匹配?
谢谢!
答案 0 :(得分:0)
我能够找到自己问题的答案!因此,为了根据我从Excel电子表格中提取的仪器编号重命名文件,我首先必须重新组织我正在下载的文件,这些文件生成随机数。
我关注了这段视频https://www.youtube.com/watch?v=hZP3y-gxyJg并在我的目录中使用了os.path.getatime来查找创建时间,然后使用重命名循环来命名它们。这按照我想要的方式组织文件,我能够按照我想要的顺序重命名它们。这是我使用的代码:
iterfiles = iter(os.listdir('/Users/username/Desktop'))
next(iterfiles)
for file_time in iterfiles:
time_stamp = os.path.getatime(file_time)
local_time = time.ctime(time_stamp)
ext = 'PDF'
print(local_time)
time_name = ('{}.{}'.format(local_time, ext))
os.rename(file_time, time_name)
sleep(0.5)
#--------RENAME FILES BASED ON NAME----------#
iterinstrument = iter(os.listdir('/Users/username/Desktop'))
next(iterinstrument)
for x, y in zip(instrument_numbers, iterinstrument):
file_name, file_ext = os.path.splitext(y)
number, year = x.split('-')
number = number.zfill(7)
new_names = ('{}-{}{}{}'.format(county, year, number, file_ext))
print(new_names)
os.rename(y, new_names)
sleep(0.5)