我想从指定行号的文本文件中提取所有数据,直到文件结束。这就是我尝试过的方式:
def extract_values(f):
line_offset = []
offset = 0
last_line_of_heading = False
if not last_line_of_heading:
for line in f:
line_offset.append(offset)
offset += len(line)
if whatever_condition:
last_line_of_heading = True
f.seek(0)
# non-functioning pseudocode follows
data = f[offset:] # read from current offset to end of file into this variable
标题和我想要的数据之间实际上有一个空行,所以理想情况下我也可以跳过它。
答案 0 :(得分:1)
您是否提前知道了行号?如果是的话,
def extract_values(f):
line_number = # something
data = f.readlines()[line_number:]
如果没有,您需要根据文件本身的内容确定行号,
def extract_values(f):
lines = f.readlines()
for line_number, line in enumerate(lines):
if some_condition(line):
data = lines[line_number:]
break
如果您的文件很大(因为文件的行被加载到内存中),这将不是理想的;在这种情况下,您可能希望在两次传递中执行此操作,仅在第二次传递时存储文件数据。
答案 1 :(得分:0)
试试这个小型python程序LastLines.py
import sys
def main():
firstLine = int(sys.argv[1])
lines = sys.stdin.read().splitlines()[firstLine:]
for curLine in lines:
print curLine
if __name__ == "__main__":
main()
示例输入,test1.txt:
a
b
c
d
使用示例:
python LastLines.py 2 < test1.txt
示例输出:
c
d
该程序假定文件中的第一行是第0行。
答案 2 :(得分:0)
您可以使用enumerate:
f=open('your_file')
for i,x in enumerate(f):
if i >= your_line:
#do your stuff
此处我将存储从0
开始的行号,而x
将包含该行
使用列表理解
[ x for i,x in enumerate(f) if i >= your_line ]
将为您提供指定行
之后的行列表使用字典理解
{ i:x for i,x in enumerate(f) if i >= your_line }
这将从指定的行号给出行号作为键和行作为值。
答案 3 :(得分:0)
您的if子句位置错误:
for line in f:
if not last_line_of_heading:
考虑以下代码:
def extract_values(f):
rows = []
last_line_of_heading = False
for line in f:
if last_line_of_heading:
rows.append(line)
elif whatever_condition:
last_line_of_heading = True
# if you want a string instead of an array of lines:
data = "\n".join(rows)