在 Python 2.5 中,我正在使用文件指针读取结构化文本数据文件(大小约为 30 MB):
fp = open('myfile.txt', 'r')
line = fp.readline()
# ... many other fp.readline() processing steps, which
# are used in different contexts to read the structures
但是,在解析文件时,我遇到了一些有趣的事情,我想报告它的行号,这样我就可以在文本编辑器中调查该文件。我可以使用 fp.tell()
来告诉我字节偏移量在哪里(例如 16548974L
),但是没有“fp.tell_line_number()”来帮助我翻译这是一个行号。
是否有 Python 内置或扩展来轻松跟踪和“告诉”文本文件指针所在的行号?
注意:我是not asking使用 line_number += 1
样式的计数器,因为我在不同的上下文中调用 fp.readline()
并且这种方法需要更多的调试而不是值得插入计数器在代码的右上角。
最佳答案
此问题的典型解决方案是定义一个新类来包装 file
的现有实例,它会自动计算数字。像这样的事情(就在我的脑海中,我还没有测试过):
class FileLineWrapper(object):
def __init__(self, f):
self.f = f
self.line = 0
def close(self):
return self.f.close()
def readline(self):
self.line += 1
return self.f.readline()
# to allow using in 'with' statements
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.close()
像这样使用它:
f = FileLineWrapper(open("myfile.txt", "r"))
f.readline()
print(f.line)
看起来像标准模块fileinput
做同样的事情(以及其他一些事情);如果你愿意,你可以使用它。
关于python - 有没有一种简单的方法来判断文件指针所在的行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6367051/