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

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

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

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

Переименовать файлы в Python --> После выполнения предложения я получил NameError: name '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) Ошибка Windows: [Ошибка 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. «Ошибка Windows: [Ошибка 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() 

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


person Sandy    schedule 09.03.2017    source источник


Ответы (1)


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

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

abc.close() 

прежде чем переименовывать файл.

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

person bennerv    schedule 09.03.2017
comment
Либо этот, либо какой-то другой процесс обращается к вашему файлу. - person Prajjwal Srivastav; 09.03.2017
comment
Я попытался поставить abc.close() перед предложением для заголовка в fname:, но вместо этого получил ошибку: для строки в abc: ValueError: операция ввода-вывода в закрытом файле - person Sandy; 09.03.2017
comment
Любая идея, что может быть другими процессами? @PrajjwalSrivastav - person Sandy; 09.03.2017
comment
@bennerv Я снова попытался закрыть, прежде чем переименовать (коды находятся в основном посте в отредактированной версии). Однако теперь у них появилась новая ошибка 183: Невозможно создать файл, если этот файл уже существует. Я почти уверен, что нет имени файла, похожего на новый файл. Искал в поисковике похожие посты, но безрезультатно. :/ - person Sandy; 09.03.2017