我正在创建一个文件类型来存储我程序中的信息。文件类型可以包含以#开头的行,如:
# 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}
答案 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:
的说明。