Как открыть одновременно два файла с одинаковым именем и разным расширением в Python?

У меня есть папка с несколькими парой файлов:

  a.txt a.json b.txt b.json  

и так далее:

Используя цикл for, я хочу открыть несколько файлов (a.txt и a.json) одновременно.

есть ли способ сделать это с помощью оператора with в Python?


Вы можете сделать что-то вроде следующего, который создает словарь с ключом по имени файла без расширения и с подсчетом количества файлов, соответствующих требуемым расширениям. Затем вы можете перебирать пары файлов, открывающие словарь:

  import osfrom collections import defaultdictEXTENSIONS = {'.json', '.txt'} directory = '/path/to /your/files'grouped_files = defaultdict (int) для f в os.listdir (directory): name, ext = os.path.splitext (os.path.join (directory, f)), если ext в EXTENSIONS: grouped_files [name  ] + = 1для имени в grouped_files: если grouped_files [name] == len (EXTENSIONS): с open ('{}. Txt'.format (name)) как txt_file,  open (' {}. Json'.format (  name)) как json_file: # обработать файлы print (txt_file, json_file)  


Как переименовать несколько файлов с одинаковым именем и разными расширениями?

У меня есть несколько файлов с таким же именем и разные расширения в папке. Первоначально все эти файлы были в формате .jpg с разными именами.

Типа:
1.j87
1.j88
1.j89

Теперь мне нужно переименовать каждое изображение имеет разные имена и расширения по отдельности.

Я нашел это, но не знаю, как использовать этот сценарий. Может кто-нибудь помочь?


0

Я знаю, как для выполнения этого с помощью оболочки Windows CMD после перехода в каталог с файлами JPG.

Сохраните этот сценарий в файле BAT, таком как renamer.bat или в любом другом незарезервированную команду и выполните ее из командной строки.

 setlocal enabledelayedexpansionset/a count = 0for/f "tokens = *" %% a in ('dir/b/od * .jpg'  ) do (ren %% a ArbitraryString ! count! .jpg set/a count + = 1) 

На основе вашего вопрос, похоже, вы также хотите переименовать каждый файл *. jpg чем-то отличным от *. jpg , что бы сливать ваши ассоциации файлов и делать изображения утомительно открывать. Если это ДЕЙСТВИТЕЛЬНО ИСТИНА, замените строку Rename на:

 ren %% a ArbitraryString ! Count!.!  count! jpg 

Улучшите этот ответ
отредактировал 19 окт. в 17:46
G-Man Says ‘Reinstate Monica’
6,9621111 золотых знаков3131 серебряный знак7373 бронзовых знака
ответил 19 окт. 2017 в 17:34
  • Буду признателен, если вы сможете взглянуть на загруженное мной изображение i.stack.imgur.com/Vvfdm.jpg — ARJUN 19 окт. : 28
добавить комментарий |

Я знаю, как сделать это с помощью оболочки Windows CMD после того, как вы перейдете в каталог ваших файлов JPG.

Сохраните этот сценарий в файле BAT, например как renamer.bat или любую незарезервированную команду и выполните ее из командной строки.

 setlocal enabledelayedexpansionset/a count = 0for/f "tokens = *"  %% a in ('dir/b/od * .jpg') do (ren %% a ArbitraryString ! count! .jpg set/a count +  = 1) 

Судя по вашему вопросу, похоже, что вы также хотите переименовать каждый файл *. jpg в нечто иное, чем *. jpg , что будет сливками ваши файловые ассоциации и сделать изображения утомительными для открытия. Если это ДЕЙСТВИТЕЛЬНО ИСТИНА, замените строку Rename на:

 ren %% a ArbitraryString ! Count!.!  count! jpg 

0

В ответ на запрос Арджуна комментарий 10/19 ~ 2100 UTC, вы должны выполнить этот скрипт в пакетном файле в том же подкаталоге, что и ваши файлы, он переименует файлы в произвольную строку чисел.01.jpg и последующих номеров, пока все файлы в каталоге не будут обработаны . ВСЕ файлы в этих каталогах, будь то JPG или нет, будут переименованы в случайное имя, порядковый номер и расширение .jpg.

Любые подкаталоги потребуют выполнения сценария внутри этих каталогов.

  setlocal enabledelayedexpansionset/a count = 0for/f "tokens = *" %% a in ('dir/b/od *. *') do (ren %% a% random%! count!  .jpg set/a count + = 1)  

Улучшите этот ответ
отредактировано 20 октября ’17 в 2:10
Скотт
18.6k1212 золотых знаков5757 серебряных знаков104104 бронзовых знака
ответил 20 окт. : 51
добавить комментарий |

В ответ на комментарий Арджуна 19.10 ~ 2100 UTC, вы должны выполнить этот скрипт в пакетном файле внутри того же подкаталога, что и ваши файлы , он переименует файлы в случайную строку чисел.01. jpg и последующие числа, пока не будут обработаны все файлы в каталоге. ВСЕ файлы в этих каталогах, будь то JPG или нет, будут переименованы в случайное имя, порядковый номер и расширение .jpg.

Любые подкаталоги потребуют выполнения сценария внутри этих каталогов.

  setlocal enabledelayedexpansionset/a count = 0for/f "tokens = *" %% a in ('dir/b/od *. *') do (ren %% a% random%! count!  .jpg set/a count + = 1)  

0

Найденный вами сценарий безоговорочно переименовывает все элементы в имя файла {порядковый номер из 1} .jpg из текущего каталога. Имейте в виду, что команды Rename или Move могут быть очень разрушительными, особенно если вы точно не знаете, что это за код.

Я меняю код, чтобы он был безопаснее для вас, следующим образом:

  Get-Item "2017-0 ~ 1. *" |  ForEach-Object {$ newName = $ _. Basename + $ _. Extension.replace (".", "_") + ".Jpg" Write-Host "rename-item" $ _ $ newName # rename-item $ _  $ newName}  

Код получает элементы с именем «2017-0 ~. *» в текущем каталоге. Для каждого элемента переименуйте элемент, добавив расширение «.jpg» в конец, в то время как исходная точка расширения и расширение заменяются на подчеркивание и расширение, например От «.001» до «_001». В этом случае вы можете узнать исходное имя файла.

Обратите внимание, что реальное действие прокомментировано.

Чтобы выполнить код:

 > cd c:  to  your  directoryC:  to  your  directory> powershellPS C:   в  ваш  каталог>  

Вставьте код

  PS C:  в  ваш  каталог> Get-Item "  2017-0 ~ 1. * "|  ForEach-Object {>>>> $ newName = $ _. Basename + $ _. Extension.replace (".", "_") + ".Jpg" >> Write-Host "rename-item" $ _ $ newName  >> # rename-item $ _ $ newName >>} >> PS C:  to  your  directory> exitC:  to  your  directory>  

Улучшите этот ответ
ответил 20 окт. 2017 в 3:54
добавить комментарий |

Найденный вами скрипт безоговорочно переименовывает все элементы в filename {порядковый номер из 1} .jpg из вашего текущего каталога. Имейте в виду, что команды Rename или Move могут быть очень разрушительными, особенно если вы точно не знаете, что это за код.

Я изменяю код, чтобы он был безопаснее для вас, следующим образом:

  Get-Item "2017-0 ~ 1. *" |  ForEach-Object {$ newName = $ _. Basename + $ _. Extension.replace (".", "_") + ". jpg "Write-Host" rename-item "$ _ $ newName # rename-item $ _ $ newName}  

Код получает элементы с именем» 2017-0 ~. * «в текущий каталог. Для каждого элемента переименуйте элемент, добавив расширение «.jpg» в конец, в то время как исходная точка расширения и расширение будут изменены на подчеркивание и расширение, например, «.001» на «_001». В этом случае вы можете знать, каково было исходное имя файла.

Обратите внимание, что настоящее действие закомментировано.

Чтобы выполнить код:

 > cd c:  to  your  directoryC:  to  your  directory> powershellPS C:  to  your  directory>  

Вставьте код

  PS C:  to  your  directory> Get-Item "2017-0 ~ 1. *" | ForEach-Object {>>>> $ newName = $ _. basename +  $ _. Extension.replace (".", "_") + ".Jpg" >> Write-Host "rename-item" $ _ $ newName >> # rename-item $ _ $ newName >>} >> PS  C:  в  ваш  каталог> exitC:  в  ваш  каталог>  

0

h>

Если вам неудобно использовать сценарии, вы можете переименовать файлы с помощью отличного (и бесплатного) IrfanView, просто следуйте следующему шаги:

  • Перейти к File > Пакетное преобразование/переименование ... .

  • В Работать как выберите Пакетное переименование .

  • В Настройках пакетного переименования измените шаблон по умолчанию для изображения ### на image ###. jpg , так как вы тоже хотите изменить расширение. Это назовет файлы «image001.jpg», «image002.jpg» и т. Д. (Если у вас более 999 изображений в этой папке, используйте вместо них image ####. Jpg ). Вы можете настроить другой шаблон имени с помощью кнопки Параметры .

  • На панели проводника справа выберите Все файлы (*. *) в Тип и перейдите в папку, в которой у вас есть файлы, затем выберите те, которые вы хотите переименовать, и нажмите Добавить (или нажмите Добавить все , если вы хотите переименовать все файлы в этой папке).

  • В Каталог вывода для файлов результатов нажмите Использовать текущий ("искать в") каталог для выбора той же папки, в которой находятся файлы, или используйте Обзор , чтобы выбрать другой, если вы хотите переместить переименованные файлы в другую папку.

  • Наконец, нажмите Запустить пакет , чтобы начать пакетное переименование.

Обратите внимание, что в качестве меры безопасности по умолчанию IrfanView будет копировать файлы с новыми именами в выходная папка, вместо того, чтобы просто переименовывать существующие. Чтобы переименовать исходные файлы, перейдите в Параметры в Настройки пакетного переименования и измените Копировать исходные/входные файлы в выходной каталог в Переместить исходные/входные файлы в выходной каталог .

Улучшите этот ответ
ответил 27 окт. 2017 в 1:01
добавить комментарий |

Если вам неудобно пользоваться скриптами, вы можете переименовать файлы с помощью отличного (и бесплатного) IrfanView, просто выполните следующие шаги:

  • Перейти к файлу > Пакетное преобразование/переименование ... .

  • В Работать как выберите Пакетное переименование .

  • В Настройках пакетного переименования измените шаблон по умолчанию для image ### на image ### .jpg , так как вы тоже хотите изменить расширение. Это назовет файлы «image001.jpg», «image002.jpg» и т. Д. (Если у вас более 999 изображений в этой папке, используйте вместо них image ####. Jpg ). Вы можете настроить другой шаблон имени с помощью кнопки Параметры .

  • На панели проводника справа выберите Все файлы (*. *) в Тип и перейдите в папку, в которой у вас есть файлы, затем выберите те, которые вы хотите переименовать, и нажмите Добавить (или нажмите Добавить все , если вы хотите переименовать все файлы в этой папке).

  • В Каталог вывода для файлов результатов нажмите Использовать текущий ("искать в") каталог для выбора той же папки, в которой находятся файлы, или используйте Обзор , чтобы выбрать другой, если вы хотите переместить переименованные файлы в другую папку.

  • Наконец, нажмите Запустить пакет , чтобы начать пакетное переименование.

Обратите внимание, что в качестве меры безопасности по умолчанию IrfanView будет копировать файлы с новыми именами в папку вывода, а не просто переименовывать существующие. Чтобы переименовать исходные файлы, перейдите в Параметры в Настройки пакетного переименования и измените Копировать исходные/входные файлы в выходной каталог в Переместить исходные/входные файлы в выходной каталог .

Оцените статью
logicle.ru
Добавить комментарий