Python提取文件指定行区间内容输出为空的问题排查
代码存在的问题
- 变量名拼写错误:定义输出文件句柄时使用的变量名是
ouput,后续执行写入操作时调用的是output,变量名不匹配,即使有符合条件的内容也无法正常写入。 - 起始行匹配规则错误:你需要匹配以Atom开头的行,原代码判断
line.strip() == "(Angstrom)",但对应行去除首尾空白后的完整内容是Atom labels, atom number, coords (Angstrom),该判断永远不成立,收集内容的标识copy始终为False,不会收集任何目标内容。 - 结束行匹配规则错误:结束行去除首尾空白后的内容是
Overall charge,原代码判断等于Overall,匹配条件不成立,即使前面收集到了内容也不会触发写入逻辑。 - 未正确关闭文件:代码没有显式关闭文件句柄,可能导致缓冲区内容未被刷新到磁盘,最终输出文件为空。
修正后可正常运行的代码
# 使用with上下文管理器自动处理文件关闭,避免资源泄漏 with open('h2_sample.input', 'r') as infile, open('coordinate.txt', 'w') as output: copy_flag = False for line in infile: stripped_line = line.strip() # 匹配起始行:以Atom开头 if stripped_line.startswith('Atom'): copy_flag = True continue # 匹配结束行:以Overall开头 elif stripped_line.startswith('Overall'): copy_flag = False break # 介于两行之间的内容直接写入输出文件,保留原行格式 elif copy_flag: output.write(line)
内容的提问来源于stack exchange,提问作者Abd-Elazeem Mohamed
相关产品推荐
相关产品推荐

