从打开的文件中获取行号python
Posted
技术标签:
【中文标题】从打开的文件中获取行号python【英文标题】:Get line number python from opened file 【发布时间】:2015-05-16 02:27:13 【问题描述】:我编写了这个 Python 2.7 小原型脚本来尝试从格式化的输入文件中读取指定的行(在此示例中为第 3、4、5 行)。稍后我将从此解析数据并对输入进行操作以构造其他文件。
从系统导入 argv
def comparator (term, inputlist):
for i in inputlist:
if (term==i):
return True
print "fail"
return False
readthese = [3,4,5]
for filename in argv[1:]:
with open(filename) as file:
for line in file:
linenum=#some kind of way to get line number from file
if comparator(linenum, readthese):
print(line)
我修复了我在脚本中发现的所有错误,但目前我看不到从文件中获取行号。这与从文件对象中提取行号有点不同,因为如果我没记错的话,文件是一个类而不是一个对象。有什么方法可以提取输入文件的行号吗?
我认为我的很多困惑可能源于我对 with 语句所做的事情,所以如果有人也可以解释我对那行代码做了什么,那就太好了。
【问题讨论】:
【参考方案1】:你可以只 enumerate
文件对象,因为 enumerate
适用于任何可迭代的东西......
for line_number, line in enumerate(file):
if comparator(line_number, line):
print line
注意,此索引从 0 开始——如果您希望第一行为 1,只需告诉 enumerate
这是您要开始的位置:
for line_number, line in enumerate(file, 1):
...
注意,我建议不要使用名称 file
-- 在 python2.x 上,file
是一种类型,因此您实际上是在隐藏一个内置函数(尽管它很少使用...) .
【讨论】:
最初我在另一个 SO 答案中看到了这个“with open”声明,我不确定他是否故意选择使用文件,因为它是一种类型。这确实是我的主要困惑点,学习枚举很有帮助。感谢您的澄清。 啊——我假设另一个答案没有像你这样的上下文管理器?当您执行x = open(...)
时,您会得到与使用上下文管理器时完全相同的x
:with open(...) as x:
。与后者不同的是,上下文管理器在退出上下文时会执行 close x
的额外工作。【参考方案2】:
您也可以像这样使用列表结构的索引本身:
with open('a_file.txt','r') as f:
lines = f.readlines()
readthese = [3,4,5]
for lineno in readthese:
print(lines[1+lineno])
由于lines
的列表已经隐式包含基于索引+1 的行号
如果文件太大而无法保存在内存中,您也可以使用:
readthese = [3,4,5]
f = open('a_file.txt','r')
for lineno in readthese:
print(f.readline(lineno+1))
f.close()
【讨论】:
以上是关于从打开的文件中获取行号python的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Python 文件句柄打开 .NET FileStream 对象?