我正在创建一个程序,用于附加用户使用Sox一起选择的音频文件。在Python中添加Windows目录
我最初创建了Linux的程序,但我使它与Windows兼容。在我将文件列表传递给Sox的窗口中时,程序引发'文件名,目录名或卷标语法不正确。'
当我打印出文件列表,它是C:\\\MyProgram\\\
等等。我如何使路径中的'\\'
变成'\'
?
我在Windows 8.1上,所以这可能是问题所在。
我曾尝试:
str(nameoffile)
os.path.abspath(nameoffile)
os.path.normpath(nameoffile)
有一个巨大的文件和目录的列表,以便设置每个绝对文件不是一种选择,我使用os.path.join()允许用户浏览文件夹。
但是,当我将文件传递到列表中,然后使用subprocess.list2cmdline(mylist)
调用列表时,它只会引发上述错误。
实施例:
mydirectory = os.getcwd()
appendlist = list()
appendlist.append("sox")
for x, i in enumerate(self.fileselected): # A List Of Files The User Selected
directory = chosendirectory
nextfile = os.path.join(chosendirectory, i)
appendlist.append(nextfile)
subprocess.call([subprocess.list2cmdline(appendlist)], shell=True)
os.path.join
时追加文件....它产生 “C:\\\Program\\\file
”,然后它被转换为str()
。 str()读取“C:\\\Program\\\file
”并且转义字符不会在字符串中注册。我如何删除转义字符作为有效的Windows目录传递给列表?
[this](http://www.diveintopython。net/file_handling/os_module.html)教程可能会对您有所帮助。在Windows中使用路径是PITA,因为''''是时间历史中几乎所有语言中字符串的转义字符。 TL; DR,在字符串文字中,路径分隔符总是会变成'''\''',因为这就是你如何从字符串中得到一个常规的''r'\'''。 – aruisdante
这是有帮助的,但是无论出于何种原因,子进程不喜欢'\\',即使在迭代时它仍然会引发错误。在os模块或其他地方是否有内置的方法来将'\'变成'\'在字符串或列表中? – caleb
查看[this](http://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-%E2%80%94-backslashes-in-windows-filenames/)。我的猜测是,执行''os.path.normpath(os.path.abspath(nameoffile))''将完成工作。 – aruisdante