0

我有一个 .csv 文件,如下所示:

name1,name2,name3 and so on

使用 Python 脚本,我试图让它读取 .csv 并为每个值创建目录,例如:name1,name2,name3将创建这些目录:name1 and name2 and name3

到目前为止,这是我的代码:

import os
import fileinput
textFile = 'E:/Videos/Movies/subtest/dirlist.csv'
path = "E:/Videos/Movies/subtest/"

#generate a txt file with the current names of the directories
def makeFile():
    # Open a file
    dirs = os.listdir( path )
    # This would print all the files and directories
    for file in dirs:
        #open the file
        tFO = open(textFile, "ab+")
        #write to the file, seprating each item with "||"
        tFO.write( file + ',' ) 
        #print output
        print ( file )
        #prints confirmation
        print 'file printed!'
        #close the file
        tFO.close()
    mainMenu()

def makeDirs():
    #open textFile as read only and set its varible as myListRead
    myListRead = open(textFile, 'rb+')
    #reads the x amount of lines and stores it as str
    str = myListRead.read();
    for line in str:
        os.makedirs(path + str)
    print 'directories created:', str

运行此代码会按我的意图创建 .csv,但是当我运行 makeDirs() 时,它会使目录名称全部变为 .csv(名称 1、名称 2、名称 3 作为文件夹名称)

4

1 回答 1

2

print 如果您在代码中添加一些语句,您的问题会立即变得明显。

给定一个如下所示的输入文件:

name1,name2,name3

以下代码:

str = myListRead.read();
for line in str:
    print 'LINE:', line

将打印:

LINE: n
LINE: a
LINE: m
LINE: e
LINE: 1
LINE: ,
LINE: n
LINE: a
LINE: m
LINE: e
LINE: 2
LINE: ,
LINE: n
LINE: a
LINE: m
LINE: e
LINE: 3
LINE: 

也就是说,您正在迭代字符,而不是逗号分隔的项目。该read()方法将整个文件作为单个字符串读取。你得到一个字符序列,而不是一个行序列。

如果你想遍历文件中的行,你不需要调用 read(),你可以这样做:

myListRead = open(textFile, 'rb+')
for line in myListRead:
    print 'LINE:', line

这将产生:

LINE: name1,name2,name3

当然,您需要用逗号分隔这一行。你可以这样做:

for line in myListRead:
    for item in line.strip().split(','):
        os.makedirs(os.path.join(path, item))
        print 'created', item

您也可以考虑使用内置csv模块来解析您的 CSV 文件,尽管这对于您的特定用例来说可能是多余的。

于 2013-07-31T16:39:17.043 回答