打开文件缩进意外

时间:2014-07-07 11:18:10

标签: python file indentation

我是在python中开发的新手我有一个很好的搜索,看看我是否可以在发布之前回答我的问题,但我的搜索空白。

我正在打开一个带有随机缩进的文件,我想搜索它以找到一个特定的行,稍后将其写入另一个文件中。为此,我正在使用:

with open("test.txt", "r+") as in_file:
buf = in_file.read().strip()
in_file.close()
out_file = open("output.txt", "w+")
for line in buf:
    if line.startswith("specific-line"):
        newline == line + "-found!"
        out_file.append(newline)
    out_file.close()

虽然我的代码加载并且没有任何问题地读取文件,但我正在努力解决的问题是如何忽略我的“test.txt”文件中的缩进。

例如:

我可能有。

ignore this line
ignore this line
specific-line one
specific-line two
ignore this line
    specific-line three
specific-line four
        specific-line five
ignore this line
ignore this line

在我的档案中。

我的代码只会找到以“特定行”开头的行,并且“一个”,“两个 '和'四个'在其中。

我需要对我的代码做些什么来改变它,这样我也可以使用' specific-line '加上' three '和'< em> 5 '也在,但忽略了我不想要的任何其他行(标记为 - '忽略此行')。

任何人都可以帮助我吗?

谢谢! =]

1 个答案:

答案 0 :(得分:4)

您有两个问题,与您在in_file中阅读的方式有关。这一行:

buf = in_file.read().strip()
整个文件的开头和结尾只有strip空格,然后:

for line in buf:

实际上正在迭代字符。另外,如果您使用close,则不需要with

相反,请尝试:

with open("test.txt") as in_file, open("output.txt", "w+") as out_file:
    for line in map(str.strip, in_file):
        if line.startswith(...):
            ...

此外,正如Brionius在评论中指出的那样,您需要比较(==)而不是将{=)分配给newline,这将导致NameError