Python将空格分隔的文件行作为单独的行读取

时间:2014-06-18 20:06:32

标签: python

这是在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。这是我需要纠正的问题。

6 个答案:

答案 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环境知道只有一个参数,并且它有空格;否则,它将为每个参数/单词创建一个目录。

我只想添加两件事:

  1. 每当你open()一个文件时,你需要确保close()它。最简单的方法是使用上下文管理器,如with open(file) as f:

  2. os实际上有一个mkdir函数,它将一个字符串作为参数。您可以按原样将每行传递到os.mkdir

  3. 所以,你可以修改你的代码:

    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会创建多个目录。