我正在尝试创建一个程序,将自身复制到另一个位置,并在桌面上创建批处理文件。我可以让它自己复制,我可以创建批处理文件,但我需要一些路径帮助。
我可以找到我的程序当前的路径。直接路径和目录路径。我的问题在于我想将文件放入(简单来说就是说)'C:\ Users \ Me \ Documents'。我该如何编辑路径?我希望能够将它放在通用的Windows计算机上,因此我无法对路径进行硬编码,因为每个用户都会有所不同。这与放置批处理文件并将其设置为正确的目录以在文档中运行python脚本相同。
我试过了两次
import os
print os.path.dirname(os.path.abspath(__file__))
和
import os
print os.path.abspath(__file__)
但我对如何编辑路径毫无头绪。当我尝试使用Google搜索并搜索这个精彩的网站时,我得到的就是在Windows上配置Python路径以及其他我目前在Python上无法理解的东西。
现在我转向你,你能帮忙吗?任何输入都会受到赞赏,如果你能解释它的工作方式会更好!
<>
由于有关我的代码的问题(以及发布它的特定代码),这里是
from sys import argv # Imports module
import os
script, create = argv # Gets script name and desired amount of copies
data = open(script) # Creates a variable to store the script
indata = copy.read() # Creates the data to be copied from the script
batData = """
echo off
%s
""" % # This is not finished, creating that batch file
createT = int(create) + 1
for i in range(1, createT): # Runs a set amount of times
copyName = "%s.py" % str(i) # Creates the name for the file
copy = open(copyName, 'w+') # Opens/creates the file for editing
copy.write(indata) # Writies the indata to the file opened
copy.close # Closes that file
batName = "%s.bat" % str(i)
bat = open(batName, 'w+')
不已经完成,但希望你能得到主旨。开头的argv是这样我可以更改所制作的副本数量,随后我会在进化代码时将其删除,但现在我喜欢它。
我目前尝试以下方法来查找路径:
import os
print os.path.abspath(__file__)
print os.path.dirname(os.path.abspath(__file__))
print os.path.dirname(__file__)
test = os.path.dirname(__file__)
a, b, c, d, e, f, g, h, i = test.split("\\")
print c
我想要发生的事情(或者我想要发生)是找到路径,然后分成几部分(每个目录或在用户名之后中断所有内容)。然后我想将文档文件夹标记附加到末尾。对于批处理而不是文档标记,它将用于桌面。
人们发布的其他一些人。我希望这有帮助!
答案 0 :(得分:1)
您的代码段返回一个字符串。只需取出该字符串并进行编辑即可创建所需的路径。我在Mac上,所以我无法使用实际的Windows目录进行测试,但我会尝试让它看起来像Windows-ish。例如,让我们说这段代码:
directory_path = os.path.dirname(os.path.abspath(__file__))
print(directory_path)
给你:
C:\ Users \用户名\应用程序数据
您可以使用split
功能将路径分解为多个部分(docs)。
stuff = path_string.split('\')
print(stuff)
代码输出:
[' C:','用户','用户名',' AppData']
您可以使用这些部分创建所需的路径,然后使用它来编写文件。所以,如果你想让username文件夹循环直到你找到它。下面是一些示例代码(只是一个让您入门的示例 - 如果您需要帮助理解代码,请阅读Python)。
username = ""
for i in range(0, len(stuff)):
if stuff[i] == "Users":
username = stuff[i + 1]
不确定这是否能回答您的问题,但希望有所帮助。
答案 1 :(得分:0)
我是否正确您正在尝试弄清楚如何在用户目录的某个位置创建文件路径,而不知道用户将执行该程序的是谁?
您可以利用环境变量。例如,我可以获得执行代码的C://Users/username/
目录的文件路径:
my_path = os.path.join("C:\\", "Users", os.getenv("USERNAME"))
其中os.getenv("USERNAME")
返回USERNAME
环境变量的值(应该是当前登录用户的名称)。
您可以使用以下命令列出所有可用的环境变量及其值:
for key, val in os.environ.items():
print("{} \t {}\n".format(key, val)) # or however you want to prettify it
您可能会很幸运,并找到一个环境变量,为您提供开始的大部分路径。
通常,os.path.join()
,os.path.relpath()
和os.path.abspath()
结合一些环境变量可能会对您有所帮助。查看os
documentation和os.path
documentation。
答案 2 :(得分:0)
多次修改路径时,我都希望添加/删除文件夹。这是我添加路径的简单方法,例如如果我想将对象的路径移动到文件夹 added_path='/train/
中。
由于我的路径通常是统一的,所以我检查第一个文件位置的最后一个拆分字符。通常,我的经验是 windows 以 \\
结尾,而 Mac 和 Linux 以 `/' 结尾,这使得它可以跨操作系统工作。 (注意:如果路径不统一,您显然将 if-else 放在 for 循环中。)
if '\\' in data[0].img_file:
split_char = '\\'
else:
split_char = '/'
for img in data:
img_path = img.img_file.split(split_char)
label_path = img.label_file.split(split_char)
img.img_file = '/'.join(img_path[:-1]) + added_path + img_path[-1]
img.label_file = '/'.join(label_path[:-1]) + added_path + label_path[-1]
所以,这个 for 循环使用所有文件夹直到文件名,我们在其中插入额外的文件夹,然后,最后添加文件名。
示例输入路径:'data/combined/18.png'
示例输出路径:'data/combined/train/18.png'