Python:使用预定义列表批量重命名目录中的文件,按创建日期排序

时间:2017-06-21 00:27:46

标签: python excel loops sorting pandas

我正在从在线存储库下载大量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"名称的顺序在我的控制台中正确显示。但是,当我采取下一步实际重命名文件时,由于来自导入文件的随机生成的名称,重命名不起作用。

如何确保文件名的更改顺序与它们进入的顺序相同?或者我如何更改文件的顺序,以便在我命名时,它们与仪器字符串的匹配?

谢谢!

1 个答案:

答案 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)