我正在尝试用python3 sockets构建一个文件传输系统。我已经连接并发送了,但我现在的问题是,发送的文件必须与程序在同一个目录下,当你收到文件时,它只是将文件放入与程序相同的目录。如何让用户输入要发送的文件的位置并选择要发送的文件的位置?
lrpiutwd1#
我假设您正在使用以下命令打开文件:
open("filename","r")
如果不提供绝对路径,open函数将始终默认为相对路径。因此,如果我想打开一个文件,如/mnt/storage/dnd/5th_edition.txt,我将 * 必须 * 用途:
open("/mnt/storage/dnd/4p5_edition","r")
如果我想把这个文件复制到/mnt/storage/trash/,我也必须使用绝对路径:
open("/mnt/storage/trash/4p5_edition","w")
相反,我决定使用这个:
open("mnt/storage/trash/4p5_edition","w")
如果在我的当前文件夹中没有一个名为mnt的目录和storage/trash目录,那么我会得到一个IOError。如果这些文件夹 * 确实 * 存在于我的当前文件夹中,那么它将最终位于/whatever/the/path/is/to/my/current/directory/mnt/storage/trash/4p5_edition,而不是/mnt/storage/trash/4p5_edition。
sqxo8psd2#
由于您说过文件将被放置在程序所在的路径中,因此以下代码可能有效
import os filename = "name.txt" f = open(os.path.join(os.path.dirname(__file__),filename))
62lalag43#
就像你说的,文件应该在项目的同一个文件夹中,所以你必须替换它,或者定义一个函数,将正确的文件路径返回到你的open()函数中,这是一种你可以用来减少搜索问题解决方案的时间的方法。它应该是这样的:
open()
import os filename = "the_full_path_of_the_fil/name.txt" f = open(os.path.join(os.path.dirname(__file__),filename))
然后你可以使用f变量的值作为文件所在目录的路径。
f
w6mmgewl4#
这很简单,只需从user获取路径:
subpath = raw_input("File path = ") print subpath file = open(subpath + str(file_name), 'w+') file.write(content) file.close()
我想这就是你需要的。
4条答案
按热度按时间lrpiutwd1#
我假设您正在使用以下命令打开文件:
如果不提供绝对路径,open函数将始终默认为相对路径。因此,如果我想打开一个文件,如/mnt/storage/dnd/5th_edition.txt,我将 * 必须 * 用途:
如果我想把这个文件复制到/mnt/storage/trash/,我也必须使用绝对路径:
相反,我决定使用这个:
如果在我的当前文件夹中没有一个名为mnt的目录和storage/trash目录,那么我会得到一个IOError。如果这些文件夹 * 确实 * 存在于我的当前文件夹中,那么它将最终位于/whatever/the/path/is/to/my/current/directory/mnt/storage/trash/4p5_edition,而不是/mnt/storage/trash/4p5_edition。
sqxo8psd2#
由于您说过文件将被放置在程序所在的路径中,因此以下代码可能有效
62lalag43#
就像你说的,文件应该在项目的同一个文件夹中,所以你必须替换它,或者定义一个函数,将正确的文件路径返回到你的
open()
函数中,这是一种你可以用来减少搜索问题解决方案的时间的方法。它应该是这样的:
然后你可以使用
f
变量的值作为文件所在目录的路径。w6mmgewl4#
这很简单,只需从user获取路径:
我想这就是你需要的。