删除列表中以#

时间:2017-10-21 09:50:50

标签: python list comments file-type

我正在创建一个文件类型来存储我程序中的信息。文件类型可以包含以#开头的行,如:

# This is a comment.

如图所示,一行前面的#表示评论。 我用Python编写了一个可以读取这些文件的程序:

fileData = []

file = open("Tutorial.rdsf", "r")

line = file.readline()

while line != "":
    fileData.append(line)
    line = file.readline()

for item in list(fileData):
   item.strip()

fileData = list(map(lambda s: s.strip(), fileData))

print(fileData)

如您所见,它接收文件,将每一行添加为列表中的项目,并剥离\ n的项目。到目前为止,非常好。

但是这些文件通常包含我已经发表的评论,并且这样的程序会将它们添加到列表中。

有没有办法删除列表中以#?

开头的所有项目

编辑:为了让事情更加清晰:评论不会是这样的:

Some code:
{Some Code}    #Foo

他们会是这样的:

#Foo
Some code:
{Some Code}

3 个答案:

答案 0 :(得分:0)

您可以直接在for循环中处理行:

with open("Tutorial.rdsf", "r") as file:
    for line in file:
        if line.startswith('#'):
            continue  # skip comments
        line = line.strip()

        # do more things with this line

如果您需要随机访问(例如,您需要访问特定索引处的行),请仅将它们放入列表中。

我使用with语句来管理打开的文件,当Python到达with块的末尾时,文件会自动为您关闭。

答案 1 :(得分:0)

从顶部开始,使用上下文管理器,可以更轻松地处理文件。

with open("Tutorial.rdsf", "r") as f:
    code = []
    for line in f:
        if not line.strip().startswith('#'):
            code.append(line.rstrip())

如果您不想删除尾随换行符,请移除.rstrip来电。

另一种方法是读取整个文件,然后调用过滤器。

with open("Tutorial.rdsf", "r") as f:
    code = filter(lambda x: not x.strip().startswith('#'), f.readlines())

请注意,第二种方法会在行后附加尾部换行符

答案 2 :(得分:-1)

检查前导#标志很容易。

改变这个:

while line != "":
    fileData.append(line)
    line = file.readline()

到此:

while line != "":
    if not line.startswith("#"):
        fileData.append(line)
    line = file.readline()

但是你的程序有点复杂。请查看文档中有关for line in file:的说明。