从文件切片行列表的“ pythonic”方法是什么?

时间:2018-07-18 12:10:06

标签: python python-2.7

我有两个列表start_listend_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)

2 个答案:

答案 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))

请注意

  

此函数将永远不会引发异常-它将在   错误(行尾将包含换行符)   找到的。)

更多详细信息,请访问https://docs.python.org/2/library/linecache.html