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

Я пытаюсь извлечь файлы 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')

Это дает: False

Любой способ сделать эту работу правильно? Каков наилучший способ иметь в первую очередь правильные пути?


person Arij SEDIRI    schedule 07.09.2016    source источник
comment
Вам не нужно экранировать прямую косую черту, только обратную косую черту. Кроме того, обычно лучше использовать необработанные строки при работе с путями к файлам Windows в python.   -  person Chris Mueller    schedule 07.09.2016
comment
Разве вы не можете просто cd зайти в srm01 и открыть там свой файл?   -  person Dimitry Kotovka    schedule 07.09.2016
comment
Возможный дубликат косой черты пути Python для Windows   -  person tripleee    schedule 07.09.2016


Ответы (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))
person Francesco Nazzaro    schedule 07.09.2016

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

f = os.path.join('C://Users//asediri//Downloads/srm/', thirdBloc, '*.tar.gz')
person Meow    schedule 07.09.2016

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

Никогда не используйте \ с 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
person Dimitry Kotovka    schedule 07.09.2016