2014-12-21 4 views
0

Я пытаюсь открыть файл в относительном положении:Открыть файл с относительным путем

import time, os 
day=time.strftime("%Y%m%d") 
month=time.strftime("%m") 
filename=time.strftime("%Y%m%d") 


logs_dir = os.path.dirname('C:\Users\user1\Desktop\folder\main\Logs') 
rel_path = '\'+month+'\'+filename+'.txt' 
abs_file_path = os.path.join(script_dir, rel_path) 
file = open(abs_file_path, 'r') 

Я не мог получить вторую строку прямо с переменными и обратными косой чертой.

ответ

2

\u имеет особое значение в строковом литерале Python; он обозначает символ Юникода. Точно так же \f, что означает форму.

Вы должны будете использовать raw-string:

logs_dir = os.path.dirname(r'C:\Users\user1\Desktop\folder\main\Logs') 

или forwardslashes:

logs_dir = os.path.dirname('C:/Users/user1/Desktop/folder/main/Logs') 

для того, чтобы Python интерпретировать их как таковые. Вы также можете удвоить каждую обратную косую черту:

logs_dir = os.path.dirname('C:\\Users\\user1\\Desktop\\folder\\main\\Logs') 

но это довольно утомительно.


Кроме того, вы должны удвоить обратную косую черту для каждого '\' поскольку строковые литералы не может закончиться в один \. Но это не очень надежное решение. Лучший подход для построения путей является использование os.path.join:

rel_path = os.path.join('\\', month, filename + '.txt') 

Затем, вы можете заменить каждый '\\' с os.sep как сказал @helloV в своем ответе. Это обеспечит, чтобы ваш код создавал правильные пути как в системах Windows, так и в системах * nix.

+0

Вам не нужен ' '\\'' 'между month' и' filename' в вызове 'os.path.join'. – tmr232

+0

Спасибо, я просто копировал код OP и пропустил это. – iCodez

+0

Спасибо! Мне пришлось добавить двойную обратную косую черту в конце 'logs_dir = os.path.dirname (r'C: \ Users \ user1 \ Desktop \ folder \ main \ Logs \\ ')' и все работало отлично! – Shad

2

Используйте os.sep вместо '\', чтобы избежать проблем с экранированием.

Try:

abs_file_path = os.path.join(script_dir, month, filename) + '.txt' 
Смежные вопросы