2016-04-05 4 views
0

Я пытаюсь сохранить файл, который я создаю с помощью функции «открыть». Ну, я попробовал почти все, чтобы сменить каталог, но ничего не работает. Файл всегда сохраняется в папке моего файла, которую я читал раньше.Change Saving-Path - Python

file = open(fname[0] + ft, 'w') 
file.write("Test") 
file.close() 

Так это все просто, но что мне нужно добавить, чтобы изменить путь творения?

Файл Диалог в индивидуальной функции:

global fname 
fname = QFileDialog.getOpenFileName(None, 'Please choose your File.',"C:\\Program Files", "Text-Files(*.txt)") 

И в Typ File (в индивидуальной функции тоже) я установить тип файла, отметив флажок и фт будет установлен в .py или .pyw

if self.exec_py.isChecked() == True: 
    global ft 
    ft = ".py" 

Я должен отметить, что я уже пробовал os.path.join и os.chdir, но файл будет печататься в файле в любом случае. Любые решения или подходы, как это исправить? Вот как я попробовал:

tmppath = "C:/temp" 
tmp = os.path.join(tmppath,fname[0]+ft) 
file = open(tmp, 'w') 
+1

Пробовал ли вы этот последний фрагмент как отдельный сценарий? Он должен работать. –

ответ

0

Ваш вопрос немного не хватает на деталях, но я предполагаю, что fname является кортеж, возвращаемый QFileDialog, и поэтому fname[0]является абсолютный путь исходного файла. Так что если вы показываете fname[0], вы увидите что-то вроде этого:

>>> fname[0] 
'C:\\myfolder\\file.txt' 

Теперь посмотрим, что происходит, когда вы пытаетесь использовать его с os.path.join:

>>> tmppath = 'C:\\temp' 
>>> os.path.join(tmppath, fname[0]) 
'C:\\myfolder\\file.txt' 

Ничего! Вывод: попытка присоединиться к двум путям просто вернет исходный путь без изменений. Что вам нужно сделать, вместо того, чтобы это принять базовое имя исходного пути, и присоединиться к нему в папку где вы хотите сохранить его:

>>> basename = os.path.basename(fname[0]) 
>>> basename 
'file.txt' 
>>> os.path.join(tmppath, basename) 
'C:\\tmp\\file.txt' 

Теперь вы можете использовать этот новый путь для сохранения файла В правильном месте.

0

Вы должны предоставить полную Filepath

with open(r'C:\entire\path\to\file.txt', 'w') as f: 
    f.write('test') 

Если вы просто указать имя файла без пути, он будет использовать текущий рабочий каталог, какой ISN 't обязательно каталог, в котором находится скрипт python для вашего запуска.. Это будет каталог, в котором вы запускали скрипт.

C:\Users\admin> python C:\path\to\my_script.py 

В этом случае текущий рабочий каталог C:\Users\admin, не C:\path\to.

+0

Вы видели последний фрагмент кода в своем посте? –