改变Saving-Path - Python

时间:2016-04-05 21:24:11

标签: python python-3.x pyqt5

我正在尝试保存一个用“打开”功能创建的文件。 好吧,我几乎尝试了一切来改变目录,但没有任何作用。该文件总是保存在我之前读过的文件夹中。

 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)") 

文件类型(在单独的功能中)我通过勾选复选框设置文件类型,ft将设置为.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')

2 个答案:

答案 0 :(得分:0)

您需要提供完整的文件路径

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

如果您只提供没有路径的文件名,它将使用当前工作目录,该目录不一定是您运行的python脚本所在的目录。它将是您从中启动脚本的目录。

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

在这种情况下,当前工作目录为C:\Users\admin,而不是C:\path\to

答案 1 :(得分:0)

您的问题在细节上有点简短,但我猜测fnameQFileDialog返回的元组,因此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 ,并将其加入要保存它的文件夹

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

现在,您可以使用此新路径将文件保存在正确的位置。