2016-03-07 88 views
0

這是我通過引用「csv」文件重命名文件名的示例代碼。此csv文件在行[0]中具有文件的舊名稱,名成一排1這樣的形象如何在不更改擴展名的情況下重命名文件名

Example csv file

import csv 
import os 
    with open('New_Names_DDP.csv') as csvfile: 
     reader = csv.reader(csvfile) 
     for row in reader: 
      oldname = row[0] 
      newname = row[1] 
      os.rename(oldname, newname) 

但在這裏我有喜歡不同extenstions(.WAV,txt文件,.xml或.html)一個文件。所以我只想重新命名文件名和新名稱,並自動添加他們的擴展名。可以請你幫我。

+1

我不明白你的問題。您的示例CSV不包含任何擴展名,僅包含文件名。那麼你從哪裏得到擴展? –

+0

我需要通過代碼讀取文件擴展名。如果我有一個文件名與100.txt在這裏我想重命名文件名稱CM0.txt和101.wav更改爲CM1.wav.like這 – lotus

+0

我要改變只有文件名。因此,該csv文件只包含文件名。 – lotus

回答

1

我不知道到底是什麼你正在嘗試做的,因爲你的問題,你的代碼示例都在談論別的東西。

我假設你想要的是:

  1. 從硬盤中讀取某個目錄中的所有文件。
  2. 如果文件名(沒有擴展名)在列a中,則將其重命名爲列b中的任何內容。

爲了做到這一點:

import os 
import csv 
import glob 

file_path = '/home/foo/bar/some/where/' 
file_pattrn = '*.*' 
file_names = {} 

with open('somefile.csv') as f: 
    reader = csv.reader(f) 
    for row in reader: 
     file_names[row[0]] = row[1] 

for file in glob.iglob(file_path+file_pattrn): 
    path, filename = os.path.split(file) 
    filename_noext, ext = os.path.splitext(filename) 
    new_filename = file_names.get(filename_noext, filename_noext) 
    os.rename(os.path.join(path, filename), 
       os.path.join(path, '{}{}'.format(new_filename, ext))) 
+0

你的假設是完全正確的。但是這段代碼並沒有重命名我的文件。 – lotus

+0

那麼它在做什麼呢? –

+0

如果我從這段代碼中刪除「file_path」,它工作正常。我得到了我所需要的。 – lotus

0
import os,csv,collections 
all_files = os.listdir('.') 
file_dict = defaultdict(str)#You could use a regular dict, but this has an advantage (see below) 
with open('New_Names_DPP.csv') as csvfile: 
    reader = csv.reader(csvfile) 
    for row in reader: 
     file_dict[row[0]] = row[1] 
for f in all_files: 
    without_extension = f[:f.rfind('.')]#Note: assuming that no files like .tar.gz 
    new_name = file_dict[without_extension] 
    if new_name != '':#In the file_dict 
     os.rename(f,new_name+f[f.rfind('.'):]#new_name plus extension 

讓我知道這是否正常工作

相關問題