Python:readlines() - 方法创建空列表

时间:2014-03-23 11:58:29

标签: python list parsing readlines

我正在尝试解析文本文件中的项目,文本行以分号分隔,如下所示:

4037;HKO_2005;OBJECT-ORIENTED PROGRAMMING               ;18.12.2011;5

4037;HKO_2009;DATABASES I                               ;2.5.2011;5

4037;HKO_2011;ALGORITHMS I                              ;7.5.2011;5

4037;HKO_2038;PROGRAMMING BASICS IN JAVA                ;22.5.2010;5

到这样的列表列表:

['4037', 'HKO_2005', 'OBJECT-ORIENTED PROGRAMMING', '18.12.2011', '5'],
['4037', 'HKO_2009', 'DATABASES I', '2.5.2011', '5'],
['4037', 'HKO_2011', 'ALGORITHMS I', '7.5.2011', '5'],
['4037', 'HKO_2038', 'PROGRAMMING BASICS IN JAVA', '22.5.2010', '5']

现在我用于测试的代码如下所示:

class Main:
    def inputFile(self):
        with open('data.txt', 'r') as data:
            self.stuff = data.readlines()
            self.separate = [elem.strip().split(';') for elem in self.stuff]
            print(self.separate)

justdoit = Main()
justdoit.inputFile()

我的问题是你已经看到的:在我粘贴之前,文本文件看起来没有双重换行符。使用我的代码,readlines() - 方法在两者之间创建空列表,如下所示:

['4037', 'HKO_2005', 'OBJECT-ORIENTED PROGRAMMING          ', '18.12.2011', '5'],
[''],
['4037', 'HKO_2009', 'DATABASES I                          ', '2.5.2011', '5'],
[''],
['4037', 'HKO_2011', 'ALGORITHMS I                         ', '7.5.2011', '5'],
[''],
['4037', 'HKO_2038', 'PROGRAMMING BASICS IN JAVA           ', '22.5.2010', '5']
['']

我相信我以后可以用rstrip()删除课程名称中的空白,但新行给我带来了麻烦。之前我因为这个而得到了一个IndexError,我不知道文本文件有双重换行符。如何在创建列表之前有效地忽略或删除这些额外的换行符?

1 个答案:

答案 0 :(得分:1)

您可以向列表推导添加条件:

self.separate = [elem.strip().split(';') for elem in self.stuff if elem.strip()]