Переименовать текстовый файл. Отредактированная версия: [Ошибка 183] Невозможно создать файл, если этот файл уже существует

Я работаю с Python 2.7x. Я новичок в Python и буду очень признателен за вашу помощь. Я прочитал много сообщений, включая показанные ниже, чтобы назвать несколько об этой ошибке:

WindowsError: [Ошибка 32] Процесс не может получить доступ к файлу, поскольку он используется другим процессом: 'new.dat' -> моя инструкция по закрытию файла уже завершена.

python 2 [Ошибка 32] Процесс не может получить доступ к файлу, потому что он используется другим процессом -> Я не могу использовать shutil, так как в используемой программе python есть какая-то ошибка, и я не могу отредактировать путь как мой компьютер является административно защищенным.

Переименовать файлы в Python -> После предложения я получил NameError: имя 'rename' не определено...:/

и т. д.

После попытки исправить мои коды, я все еще получаю ту же ошибку.

Что я хотел бы сделать: я читаю файлы в каталоге, если какой-либо из файлов содержит определенную строку, я бы переименовал текстовый файл (т.е. first.txt в firstfound.txt.)

РЕДАКТИРОВАННАЯ ВЕРСИЯ: я попытался переместить abc.close() перед тем, как переименовать файл:

import os

fname = raw_input("Enter file name: ")
#fill in file directory here
abc = open(fname)
for line in abc:
 if not line.find("scramble") : 
  continue
 oldfile = fname
abc.close() 
if oldfile == fname:
 for title in fname:
    endname = title.find('.txt')
    oldtitle = title[:endname]
    newfile = oldtitle +"found.txt"
    os.rename(oldfile,newfile)

Но у меня есть эта ошибка вместо последней строки. os.rename(oldfile,newfile) WindowsError: [Ошибка 183] Невозможно создать файл, если этот файл уже существует. В моей папке нет файла с новым именем. Большое спасибо за ваш совет!

РЕДАКТИРОВАННАЯ ВЕРСИЯ 2: Я также пробовал этот другой набор кодов, но он дал мне WindowsError: [Ошибка 5] Доступ запрещен. Могу ли я узнать, есть ли такая вещь, что я не могу переименовать TXT-файл, потому что у меня нет прав администратора? Спасибо!

import os

fname = raw_input("Enter file name: ")
#fill in file directory here
abc = open(fname)
for line in abc:
 if not line.find("scramble") : 
  continue
 oldfile = fname
abc.close() 

if (oldfile == fname): #+'/' +  "a.txt"
 for title in fname:
    endname = title.find('.txt')
    oldtitle = title[:endname]
    new_file = oldtitle +'/' +  "a.txt"
    os.rename(fname,new_file)

ПЕРВОНАЧАЛЬНАЯ версия: я получил ошибку в строке os.rename. "WindowsError: [Ошибка 32] Процесс не может получить доступ к файлу, потому что он используется другим процессом"

Весь мой программный код показан ниже:

import os

fname = raw_input("Enter file name: ")
#fill in file directory here
abc = open(fname)
for line in abc:
 if not line.find("scramble") : 
  continue
 old_file = fname
 for title in fname:
    endname = title.find('.txt')
    oldtitle = title[:endname]
    new_file = oldtitle +'/' +  "found.txt"
    os.rename(old_file,new_file) ##WindowsError: [Error 32] The process cannot access the file because it is being used by another process
abc.close() 

Я не понимаю, почему эта ошибка сохраняется. (Я закрыл все файлы и папки). Большое спасибо!

1 ответ

Решение

Скорее всего, проблема связана с вашим вызовом open() в вашем коде. Функция open() в python открывает файл для чтения / записи, поэтому, если вы открываете файл, вы не можете вызвать для него переименование, так как он открыт в другом месте.

Вместо этого вы должны позвонить

abc.close() 

перед переименованием вашего файла.

Смотрите эту ссылку для получения дополнительной информации о файловом вводе / выводе.

Другие вопросы по тегам