我正在尝试将列表中的元素传递给for循环,当然我正在获取经典错误'参数1必须是字符串而不是列表' - 对于os.chdir()函数。
这是我的代码,有关如何解决上述错误并仍然将我的列表元素传递给脚本的其余部分的任何建议,以便循环遍历每一个将非常感谢!!
path= ['C:\\DataDownload\Administrative', 'C:\\DataDownload\Cadastral', 'C:\\DataDownload\Development']
for x in path[:]:
os.chdir(path)
#Remove all previous files from the current folder
for file in os.listdir(path):
basename=os.path.basename(file)
if basename.endswith('.DXF'):
os.remove(file)
if basename.endswith('.dbf'):
os.remove(file)
if basename.endswith('.kmz'):
os.remove(file)
if basename.endswith('.prj'):
os.remove(file)
if basename.endswith('.sbn'):
os.remove(file)
if basename.endswith('.sbx'):
os.remove(file)
if basename.endswith('.shp'):
os.remove(file)
if basename.endswith('.shx'):
os.remove(file)
if basename.endswith('.zip'):
os.remove(file)
if basename.endswith('.xml'):
os.remove(file)
答案 0 :(得分:6)
您希望os.chdir(x)
代替os.chdir(path)
。
path
是包含所有路径的列表(因此可能应命名为paths
),因此您不能将其用作chdir
的参数。
答案 1 :(得分:2)
首先,如果您想以这种方式对Windows路径进行硬编码,加倍您的反斜杠(否则,一旦您拥有{{{},就会弹出意外行为1}}在您的路径中例如)。
无需复制列表(使用\t
):path[:]
也可以。
无需明确调用for x in path
...
os.chdir
条款有点丑陋(难以维护);因此可以简化这个例子:
if
可能会有所帮助