首页 > 解决方案 > 在while循环python中从列表中写入多个文本文件:仅获得一个文件

问题描述

我有三份关于导演、电影和演员的名单。导演有一部或多部电影,而一部电影有一名或多名演员。这在列表中用分隔符“#”表示,如下所示:

directors[director1,director2]
movies[director1movie1,director1movie2,#,director2movie1,...] 
actors[movie1actor1,movie1actorN,#,movie2actor1,movie2actorN,...]

我正在尝试在 python 中编写文本文件,为每部电影显示如下内容:

John_Wick

Willem_Dafoe
Keanu_Reeves
Bridget_Moynahan
John_Leguizamo
Dean_Winters
Alfie_Allen
Adrianne_Palicki
Michael_Nyqvist
Ian_McShane

Director: David_Leitch_(actor)
Director: Chad_Stahelski

我的代码实现了这一点,但它只为一部电影编写了一个文本文件,尽管代码输出显示它遍历了所有三个列表中的所有项目,并且列表中有两部电影:

代码:

def write_to_TxtFile(self,directorsL,moviesL,actorsL): countMovieL = -1 countActor = -1

    for director in directorsL:
        countMovieL += 1
        print('------------------------ ')
        print(director)
        while moviesL[countMovieL] != '#' and countMovieL != len(moviesL):
            print('------------------------ ' + str(countMovieL))
            print(moviesL[countMovieL])
            if not(os.path.exists(moviesL[countMovieL] + '.txt')):
                with open('{}.txt'.format(moviesL[countMovieL]),'a')as file:
                    file.write(moviesL[countMovieL] + '\n\n')
                    countActor += 1
                    while actorsL[countActor] != '#' and countActor != len(actorsL):
                        print(actorsL[countActor])
                        file.write(actorsL[countActor] + '\n')
                        countActor += 1
                    file.write('\nDirector: ' + director + '\n')
                    file.close()
            else:
                file = open(moviesL[countMovieL] + '.txt','a')
                file.write('Director: ' + director+ '\n')
                file.close()

            countMovieL += 1
            if not(file.closed):
                file.close()

代码输出: 输出

问题: 始终写入 John Wick 文本文件,但从未写入 John Wick 第 2 章文本文件。这与列表中电影的顺序无关(约翰威克第 2 章在约翰威克之前或之后)。谢谢您的帮助。

标签: python-3.x

解决方案


代码中的所有内容都是正确的,但我没有考虑到电影名称可能包含以下字符之一:[\,/,:,*,?,",<,>,|] 这些可能不会出现在名称中的文本文件。

从字符串中删除所有上述字符并创建所有文件:

for character in notAllowed:
    if character in nameX:
        nameX = nameX.replace(character,'')

推荐阅读