python - 有没有一种简单的方法来判断文件指针所在的行号?

标签 python text-files line-numbers

在 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/

相关文章:

javascript - 如何使用 javascript 在 html 文本框旁边制作自动行号?

javascript - HTML/CSS/JS : How to make an illusion of a textarea with line numbers?

python - SQLite3 Python : How to do an efficient bulk update?

python - 比较数组值的更简洁的方法?

Matlab 从文本文件到稀疏矩阵。

c++ - 从文件中读取第 11 列数字并取平均值?(c++)

c# - 在富文本框中显示行号c#

python - 垃圾收集-mark + sweep是否必须为整体/原子

python - 向 matplotlib 等高线图添加十字准线或标记

c++ - 为什么 (foobar>>x) 优于 (!foobar.eof() )