Переименование файлов с кавычками в заголовке с использованием Python - PullRequest
0 голосов
/ 15 марта 2019

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

Мне нужно переименовать файлы с такими названиями, как

a.jpg
'b.jpg'
c.jpg
"d.jpg"

до

a.jpg
b.jpg
c.jpg
d.jpg

Некоторые из этих заголовков также имеют кавычки внутри заголовка, но не имеет значения, удаляются они или нет.

Я пытался

import os
import re

fnames = os.listdir('.')
for fname in fnames:
   os.rename(fname, re.sub("\'", '', fname))

и

import os
for file in os.listdir("."):
  os.rename(file, file.replace("\'", "")) 

чтобы затем сделать то же самое для "кавычки", но заголовки остались неизменными. Я думаю, это может быть связано с тем, что listdir возвращает имена файлов с кавычками вокруг них, но я не уверен.

Редактировать: я работаю над Ubuntu 18.04.

Ответы [ 2 ]

1 голос
/ 15 марта 2019

В Windows имя файла с двойными кавычками не является допустимым именем файла. Однако допустимо имя файла с одинарными кавычками.

Строка с двойными кавычками в Python будет выглядеть так:

'"I\'m a string with a double quote on each side"'

Строка с одинарными кавычками в Python будет выглядеть так:

"'I\'m a string with a single quote on each side'"

Поскольку у вас не может быть двойного кавычки в Windows, вы не можете os.rename('"example.txt"', "example.txt"). Потому что он не может существовать даже для переименования.

Вы можете поместить этот скрипт на рабочий стол и наблюдать за изменением имен файлов при его выполнении:

import os

open("'ex'am'ple.t'xt'",'w')
input("Press enter to rename.")
#example with single quotes all over the filename
os.rename("'ex'am'ple.t'xt'", "example.txt")

open("'example.txt'",'w')
input("Press enter to rename.")
#example with single quotes on each side of filename
os.rename("'example2.txt'", "example2.txt")
1 голос
/ 15 марта 2019

Вот моя попытка использовать цикл for, как вы, и перечислить понимание, используемое для строки, что также является итеративным.

import os

files = os.listdir(os.getcwd())
for file in files:
    new_name = ''.join([char for char in file if not char == '\''])
    print(new_name)
    os.rename(file, new_name)

Измените список запрещенных_чаров с символами, которые вам не нужны в будущем имени файла. Помните, что это также изменит имена папок afaik, так что вы можете проверить в начале цикла for если os.isfile (файл): перед сменой имени. Я на самом деле не понимаю, как вы будете иметь имена файлов, которые включают в себя расширение внутри кавычек, но это должно работать в любом случае. Я настоятельно рекомендую быть осторожным, если вы хотите удалить точки. Я также рекомендую заглянуть в документацию по модулю os, прежде чем использовать его функции, так как они могут делать то, о чем вы можете не знать. Например: переименование существующего имени файла в каталоге просто тихо заменит файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...