2016-11-07 5 views
0

Это мой текущий (из ноутбука Jupyter) код для переименования текстовых файлов. Проблема в том, что когда я запускаю код, переименованные файлы помещаются в мою текущую рабочую папку Jupyter. Я хотел бы, чтобы файлы оставались в исходной папкеСохранение переименованных текстовых файлов в исходной папке

import glob 
import os 

path = 'C:\data_research\text_test\*.txt' 

files = glob.glob(r'C:\data_research\text_test\*.txt') 

for file in files:   
    os.rename(file, file[-27:]) 
+1

Что вы переименовываете в файлы? Если вы удалите путь к каталогу, файлы будут попадать в текущую папку. Возможно, сначала '% cd' в эту папку? Или используйте 'os.path.dirname' и' os.path.join', чтобы получить имя папки из исходных файлов и объединить это с новыми файлами. – Evert

ответ

1

Вы должны только изменить имя и оставить путь таким же. Ваше имя не всегда будет длиннее, чем 27, поэтому для этого вам не нужен код. То, что вы хотите, это то, что просто отделяет имя от пути, независимо от имени, независимо от пути. Что-то вроде:

import os 
import glob 

path = 'C:\data_research\text_test\*.txt' 

files = glob.glob(r'C:\data_research\text_test\*.txt') 

for file in files:  
    old_name = os.path.basename(file) # now this is just the name of your file 
    # now you can do something with the name... here i'll just add new_ to it. 
    new_name = 'new_' + old_name # or do something else with it 
    new_file = os.path.join(os.path.dirname(file), new_name) # now we put the path and the name together again 
    os.rename(file, new_file) # and now we rename. 

Если вы используете окна вы можете использовать ntpath пакет вместо этого.

0

file[-27:] принимает последние 27 символов имени файла, поэтому, если все ваши имена файлов не составят 27 символов, это не удастся. Если это действительно так, вы удалили имя целевого каталога, чтобы файл был перенесен в ваш текущий каталог. os.path имеет служебные программы для управления именами файлов, и вы должны их использовать:

import glob 
import os 

path = 'C:\data_research\text_test*.txt' 

files = glob.glob(r'C:\data_research\text_test*.txt') 

for file in files: 
    dirname, basename = os.path.split(file) 
    # I don't know how you want to rename so I made something up 
    newname = basename + '.bak' 
    os.rename(file, os.path.join(dirname, newname)) 
+0

Спасибо за понимание. Стало ясно, как работает os.path.split() и что «file [-27:]» удаляет необходимую мне информацию. – davids163

Смежные вопросы