Удаление символов возврата каретки из файла с использованием Python - PullRequest
5 голосов
/ 02 апреля 2011
import os
import sys

files = os.listdir(sys.argv[1])
for file in files:
    if file[-4:] == ".png":
        os.rename(file, file.replace('\r', ''))

Использую приведенный выше код для удаления \ r из имени файла, но кое-как, как при выполнении я получаю следующую ошибку

Traceback (most recent call last):
  File "renameImages.py", line 9, in <module>
    os.rename(f, f.replace('\r', ''))
OSError: [Errno 2] No such file or directory

Куда я иду не так?

Ответы [ 2 ]

5 голосов
/ 02 апреля 2011

Вы не указали ему каталог файла, который был объявлен в argv[1] попробуй os.rename(sys.argv[1]+"/file",sys.argv[1]+"/"+replace('\r'','') (или '\\' для Windows).

1 голос
/ 02 апреля 2011

Вы можете использовать метод str.rstrip ('\ r'), чтобы удалить набор символов с правой стороны строки:

>>> s="this is your brain on drugs\r\n\r\n"
>>> s
'this is your brain on drugs\r\n\r\n'
>>> s=s.rstrip('\n\r ')
>>> s
'this is your brain on drugs'

Вы говорите в своем сообщении, что имя файла имеет \r в конце; это было бы очень необычно. Вы уверены, что имя вашего файла имеет \r в конце строки, или вы предполагаете, что оно есть, потому что вы использовали Python для его печати? Помните, что Python добавляет автоматический возврат к строке, которую вы печатаете.

Редактировать

ОК: имя файла действительно имеет \r в конце. Моя первая рекомендация - исправить скрипт, который выдает такие недружественные имена файлов ...

Для этого сценария вам нужно либо добавить имя каталога на передней панели, либо компакт-диск в соответствующий каталог. Поскольку ЭТОТ ответ имеет предваряющий, вот CD'ing:

try:
    os.chdir(sys.argv[1])
except OSError:
    print "can't change to ",sys.argv[1]
    sys.exit(1)

# proceed with the rest of your script... 
...