2017-06-21 3 views
0

オンラインリポジトリから多数のPDFドキュメントをダウンロードしていますが、適切な命名規則はありません。ファイルは、私がExcelスプレッドシートに置いた名前のリストと整列しています。Python:予め定義されたリストを使用してディレクトリ内のファイルのバッチリネームを作成し、日付順にソート

Excelスプレッドシートをインポートし、変数に名前を割り当ててから、os.rename()を使用して、ダウンロードしたファイルの名前を変更してリストにマッチさせます。

.PDFをダウンロードすると、それぞれにURLで指定されているのではなく、ランダムな命名規則が与えられます。これらは、リンクが選択されるたびにランダムに生成されます。正しい順序で文書を並べ替えることができないため、問題が発生しています。

私がしたいのは、ドキュメントを「作成日」で並べ替えることです。 sleep()を使用することにより、文書番号が一致する文書を正しい順序でダウンロードしましたが、変更したい名前を反復処理するために適切に整列する方法がわかりません。ここで

は、私のコードのサンプルです:私は「new_names」を印刷する場合

#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) 

名の順序は私のコンソールで正しく出てきます。しかし、実際にファイルの名前を変更するために次のステップを踏むと、インポートされたファイルからランダムに生成された名前があるため、名前の変更は機能しません。

どのようにファイル名が入って来るのと同じ順序で変更されることを確認できますか?または、ファイルの順番をどのように変更して、名前を付けると、インストゥルメントの文字列が一致するようにすることができますか?

ありがとうございました!

答えて

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) 
関連する問題