Как вставить строки и косые черты в путь?

Я пытаюсь извлечь файлы tar.gz, которые находятся в разных файлах с именами srm01, srm02 и srm03. Имя файла должно быть введено (строка), чтобы запустить мой код. Я пытаюсь сделать что-то вроде этого:

import tarfile
import glob

thirdBloc = 'srm01' #Then, that must be 'srm02', or 'srm03'
for f in glob.glob('C://Users//asediri//Downloads/srm/'+thirdBloc+'/'+'*.tar.gz'):
    tar = tarfile.open(f)
    tar.extractall('C://Users//asediri//Downloads/srm/'+thirdBloc)

У меня есть это сообщение об ошибке:

IOError: CRC check failed 0x182518 != 0x7a1780e1L

Сначала я хочу убедиться, что мой код находит файлы.tar.gz. Поэтому я попытался просто напечатать мои пути после glob:

thirdBloc = 'srm01' #Then, that must be 'srm02', or 'srm03'
for f in glob.glob('C://Users//asediri//Downloads/srm/'+thirdBloc+'/'+'*.tar.gz'):
    print f

Это дает:

C://Users//asediri//Downloads/srm/srm01\20160707000001-server.log.1.tar.gz
C://Users//asediri//Downloads/srm/srm01\20160707003501-server.log.1.tar.gz

Метод os.path.exists говорит мне, что мои файлы не существуют.

print os.path.exists('C://Users//asediri//Downloads/srm/srm01\20160707000001-server.log.1.tar.gz')

Что дает: Ложь

Есть ли способ правильно выполнить эту работу? Как лучше всего иметь правильные пути?

3 ответа

Чтобы соединить пути, вы должны использовать os.path.join следующим образом:

import os

import tarfile
import glob

thirdBloc = 'srm01' #Then, that must be 'srm02', or 'srm03'
for f in glob.glob(os.path.join('C://Users//asediri//Downloads/srm/', thirdBloc, '*.tar.gz'):
    tar = tarfile.open(f)
    tar.extractall(os.path.join('C://Users//asediri//Downloads/srm/', thirdBloc))

C://Users//asediri//Downloads/srm/srm01\20160707000001-server.log.1.tar.gz

Никогда не используйте \ with python для пути к файлу, \201 это символ \x81. Это приводит к этому:

C://Users//asediri//Downloads/srm/srm01ü60707000001-server.log.1.tar.gz

вот почему os.path.exists не находит его

Или использовать (r"C:\...")

Я бы предложил вам сделать это:

import os
os.chdir("C:/Users/asediri/Downloads/srm/srm01")
for f in glob.glob(str(thirdBloc) + ".tar.gz"):
    print f

os.path.join создаст правильные пути для вашей файловой системы

f = os.path.join('C://Users//asediri//Downloads/srm/', thirdBloc, '*.tar.gz')
Другие вопросы по тегам