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