这是在Windows Server 2008 R2上。我有一个输入文件,每行一个输入。一些输入中有空格。我正在尝试使用下面的简单代码,但它将每个单词分开,而不是每行。我应该最终得到208个新文件夹(任何空格被删除)但我最终得到230因为这个。我需要更改什么才能解决问题?
import os
f = open("out.txt", "r")
os.chdir("base location")
for line in f:
os.system("mkdir " + line.strip())
(例如,“下载示例”是out.txt中的一行,但此脚本会创建两个文件夹,“下载”和“示例”。)
为清晰起见编辑:我有一个208个名字的列表,每行1个。其中一些名称有空格。我需要为目录base location
中的每个LINE创建一个文件夹。上面的脚本是每个WORD创建一个文件夹,而不是每个LINE。这是我需要纠正的问题。
答案 0 :(得分:4)
这不是Python问题。这是操作系统问题。我认为你正在运行Linux(你没说)。
运行此:
mkdir Line with multiple words
...将创建四个目录,而不是一个。
更新: @bgporter也解释了这一点。
更好的解决方案是不使用os.system
(基本上,永远),而是使用os.mkdir
代替:
import os
f = open("out.txt", "r")
os.chdir("base location")
for line in f:
s = line.strip()
if len(s)>0:
# ignore blank or whitespace-only lines
os.mkdir(s)
答案 1 :(得分:2)
如果没有样本输入,很难确定,但看起来你需要引用目录创建。
for line in f:
os.system("mkdir '%s'" % line.strip())
在Windows上,单引号会导致不良影响,因此可能需要使用双引号。
for line in f:
os.system('mkdir "%s"' % line.strip())
答案 2 :(得分:2)
如果你跑:
mkdir hello world
在Linux中,您将创建两个目录,一个名为" hello",另一个名为" world"。
你需要运行
mkdir "hello world"
为了创建一个包含空格的目录名。
答案 3 :(得分:2)
这里的其他答案都没问题 - 问题与Unix命令的工作原理有关 - 如果你想使用mkdir创建一个名称中包含空格的目录,你必须要转义空格或放置引号在名称周围,以便你的Unix环境知道只有一个参数,并且它有空格;否则,它将为每个参数/单词创建一个目录。
我只想添加两件事:
每当你open()
一个文件时,你需要确保close()
它。最简单的方法是使用上下文管理器,如with open(file) as f:
。
os
实际上有一个mkdir
函数,它将一个字符串作为参数。您可以按原样将每行传递到os.mkdir
。
所以,你可以修改你的代码:
import os
with open("out.txt", "r") as f:
os.chdir("base location")
for line in f:
os.mkdir(line.strip())
答案 4 :(得分:1)
编辑:这是修复
import os
f = open("out.txt", "r")
os.chdir("base location")
for line in file:
os.system("mkdir {}".format(line.strip().replace(" ", r"\ ")))
问题是mkdir
将其输入解释为要创建的目录列表,除非您转义空格。
答案 5 :(得分:1)
替换此行:
os.system("mkdir " + line.strip())
带
os.system("mkdir '{0}'".format(line.strip()))
通过引用mkdir
的参数,您可以告诉它创建一个名称包含空格的单个目录。如果省略引号,mkdir
会创建多个目录。