我有两个列表start_list
和end_list
。我需要从start_list
中的行号开始,到end_list
中的相应行号结束的行进行剥离。然后需要将它们写入另一个文件。最“ pythonic”的方法是什么?
我在C ++中使用两个for
循环的方式进行了尝试。我想了解python中最有效的方法。我试图在循环内使用islice()
函数,但是没有给出正确的结果。请检查以下代码以了解我的实现。
content = []
try:
with open(dir+ '/' + file_name, "r") as file:
for start, end in zip(start_list, end_list):
for lines in itertools.islice(file, start, end):
content.append(lines)
答案 0 :(得分:1)
问题是您不能通过这种方式将islice与文件对象一起使用。一旦读取了这些行,就不能在没有明确要求的情况下退回文件。
您可以在第二个file.seek(0)
之前添加一个for
或者您一次读取文件,然后遍历内存中的文件内容:
content = []
try:
with open(os.path.join(dir, file_name), "r") as file:
file_content = file.readlines()
for start, end in zip(start_list, end_list):
content.extend(file_content[start:end])
答案 1 :(得分:1)
使用linecache util-
尝试一次import linecache
content=[]
file_path="path_to_file"
for start, end in zip(start_list, end_list):
for line_no in range(start,end):
content.append(linecache.getline(file_path,line_no))
请注意
此函数将永远不会引发异常-它将在 错误(行尾将包含换行符) 找到的。)