Замена '\' на '\\' - PullRequest
       31

Замена '\' на '\\'

0 голосов
/ 25 июня 2019

Я пытаюсь заменить '\' на '\\', но это не работает, как я думал.

Я пытался использовать f.replace('\','\\'), но выдает ошибку, например неожиданный символ после символа продолжения строки.

files = []
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for file in f:
        if '.dcap' in file:
            files.append(os.path.join(r, file))

for f in files:
    print(f)
    f.replace( '\' , '\\')
    os.system("dcapgen.exe f")

В основном я хочу запустить файл .exe для всех файлов .dcap в указанном каталоге (путь). при печати f в файлах указывается путь к файлу, например C: \ Users \ folder \ a.dcap . но при выдаче os.system("dcapgen.exe f"), поскольку f представляет C: \ Users \ folder \ a.dcap, а одиночная обратная косая черта не распознается python, его ошибка выбрасывания похожа на

Файл трассировки: f не удалось. Файл все еще может быть обработан, но общее количество кадров может отображаться как ноль, и сообщение об ошибке может быть сгенерировано для последнего кадра. Не удается открыть файл: "f" (нет такого файла или каталога)

Итак, я хочу заменить одну обратную косую черту двойной. И я попытался использовать os.system("dcapgen.exe C:\\Users\\folder\\a.dcap") и он работает нормально.

Ответы [ 2 ]

2 голосов
/ 25 июня 2019

Я бы предложил решить проблему по-другому. Прежде всего, есть встроенный пакет glob, который дает вам возможность использовать звездочку в качестве символа подстановки для фильтрации файлов определенного типа. Во-вторых, вам не нужно заменять разделители файлов.

КОД

import glob
import os

files = glob.glob("{}{}*.dcap".format(path, os.filesep)

for f in files:
    print(f)
    os.system("dcapgen.exe \"{}\"".format(f))

ПОЯСНЕНИЯ

Символ обратной косой черты избегает всего. Поэтому, когда вы пишете '\', '\\', он фактически разрешается в эту строку ', плюс недопустимая последовательность \\'. Это является причиной ошибки относительно продолжения линии.

Если вы хотите использовать значение строковой переменной в другой строке, вы должны использовать отформатированную строку. Я бы рекомендовал использовать str.format вместо операции по модулю, потому что это более безопасно с точки зрения неудач. В сообщении об ошибке говорится, что имя файла «f» не может быть разрешено операционной системой. Это означает не значение f, а буквенную строку "f" в качестве имени файла.

1 голос
/ 25 июня 2019

f является переменной. Чтобы использовать переменную в строке, вам понадобится строка Интерполяция

Вы можете использовать %-formatting

files = []
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for file in f:
        if '.dcap' in file:
            files.append(os.path.join(r, file))

for f in files:
    print(f)
    f.replace( '\' , '\\')
    os.system("dcapgen.exe %s" % f)

...