2016-04-23 190 views
2

我有一個包含多個文件的目錄。 文件名稱遵循這種模式4digits.1.4digits。[條形碼] 條形碼指定每個文件,它由7個字母組成。 我有一個txt文件,其中一列中有條形碼,另一列是文件的真實名稱。 我想要做的是正確的pyhthon腳本,根據條形碼自動重命名每個文件,它是寫在txt文件中的新名稱。Python3將文件重命名爲從txt文件導入新名稱的目錄

有沒有人可以幫助我?

非常感謝!

+0

與你的例子更精確和格式化你的問題說清楚了「視覺」的人,請:) –

回答

1

下面的代碼將爲您的具體使用情況做這項工作,但可以使它更通用的重新命名。

import os # os is a library that gives us the ability to make OS changes 

def file_renamer(list_of_files, new_file_name_list): 
    for file_name in list_of_files: 
     for (new_filename, barcode_infile) in new_file_name_list: 
      # as per the mentioned filename pattern -> xxxx.1.xxxx.[barcode] 
      barcode_current = file_name[12:19] # extracting the barcode from current filename 
      if barcode_current == barcode_infile: 
       os.rename(file_name, new_filename) # renaming step 
       print 'Successfully renamed %s to %s ' % (file_name, new_filename) 


if __name__ == "__main__": 
    path = os.getcwd() # preassuming that you'll be executing the script while in the files directory 
    file_dir = os.path.abspath(path) 
    newname_file = raw_input('enter file with new names - or the complete path: ') 
    path_newname_file = os.path.join(file_dir, newname_file) 
    new_file_name_list = [] 
    with open(path_newname_file) as file: 
     for line in file: 
      x = line.strip().split(',') 
      new_file_name_list.append(x) 

    list_of_files = os.listdir(file_dir) 
    file_renamer(list_of_files, new_file_name_list) 

預假設: newnames.txt - 逗號

0000.1.0000.1234567,1234567 
0000.1.0000.1234568,1234568 
0000.1.0000.1234569,1234569 
0000.1.0000.1234570,1234570 
0000.1.0000.1234571,1234571 

文件

1111.1.0000.1234567 
1111.1.0000.1234568 
1111.1.0000.1234569 

已更名爲

0000.1.0000.1234567 
0000.1.0000.1234568 
0000.1.0000.1234569 

終端輸出:

>python file_renamer.py 
enter file with new names: newnames.txt 
The list of files - ['.git', '.idea', '1111.1.0000.1234567', '1111.1.0000.1234568', '1111.1.0000.1234569', 'file_renamer.py', 'newnames.txt.txt'] 
Successfully renamed 1111.1.0000.1234567 to 0000.1.0000.1234567 
Successfully renamed 1111.1.0000.1234568 to 0000.1.0000.1234568 
Successfully renamed 1111.1.0000.1234569 to 0000.1.0000.1234569 
+0

如果我已經預先假設任何事情,你的意思不是,把它留在評論區和我會更新代碼。 –

+0

非常感謝您的幫助。我理解了第一部分,但不完全是「如果」部分,也許是因爲我沒有很好地表達自己。另外我不必擔心條碼了。 – MRM

+0

在一個目錄中,我有幾個文件和.txt文件選項卡分隔。在txt文件中,第二列中的名稱將與我的目錄中的文件的文件名匹配。在txt的第一列中,我有我想要重命名我的文件的名稱。我想我應該在我的目錄中列出我的文件,並且如果名稱與我的txfile中的第二列匹配,請將其重命名爲第一列中同一行中的名稱。這是否有意義?萬分感謝! – MRM

2

我會給你的邏輯:

讀取包含條形碼和名稱的文本文件。 http://www.pythonforbeginners.com/files/reading-and-writing-files-in-python

在txt文件的每一行如下操作:

2.分配在兩個分開的變量在第一(條形碼)第二(名稱)列中的值,並說「B」和「N」。

3.現在我們必須找到其中有條形碼'B'的文件名。鏈接 Find a file in python將幫助你做到這一點。(第一個答案,第三例如,對於你的情況,你會發現會像「* B」的名稱)

4.上一步會給你具有B作爲一部分的文件名。現在使用rename()函數將文件重命名爲'N'。這個鏈接會幫你。 http://www.tutorialspoint.com/python/os_rename.htm

建議:而不是有兩列的txt文件。你可以有一個csv文件,這將很容易處理。

相關問題