python数组索引函数

2024-04-25 20:03:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个函数,它将读取给定要跳过的页眉行数和要跳过的页脚行数的文件。你知道吗

def LoadText(file, HeaderLinesToSkip, FooterLinesToSkip):
    fin = open(file)
    text = []
    for line in fin.readlines()[HeaderLinesToSkip, -FooterLinesToSkip]
        text.append(line.strip())
    return text

我的问题是这个函数只能在FooterLinesToSkip至少等于1的情况下正常工作。如果FooterLinesToSkip=0,则函数将返回[]。我可以用if语句解决这个问题,但是有更简单的形式吗?你知道吗

编辑:我实际上简化了我的问题;从文件中读取的行包含由半列分隔的列。实函数包括.split(分隔符\u字符),只应存储列1。你知道吗

def LoadText(file, HeaderLinesToSkip, FooterLinesToSkip):
    fin = open(file)
    text = []
    for line in fin.readlines()[HeaderLinesToSkip, -FooterLinesToSkip]
        text.append(line.strip().split(';')[1])
    return text

Tags: 函数textinfordeflineopenfile
1条回答
网友
1楼 · 发布于 2024-04-25 20:03:54

改为将FooterLinesToSkip设置为None,因此切片默认为列表长度:

def LoadText(file, HeaderLinesToSkip, FooterLinesToSkip):
    with open(file) as fin:
        FooterLinesToSkip = -FooterLinesToSkip if FooterLinesToSkip else None
        text = []
        for line in fin.readlines()[HeaderLinesToSkip:FooterLinesToSkip]):
            text.append(line.strip().split(';')[1])

让我给你一个改进,它不需要你把整个列表读入记忆:

from collections import deque
from itertools import islice

def skip_headers_and_footers(fh, header_skip, footer_skip):
    buffer = deque(islice(fh, header_skip, header_skip + footer_skip), footer_skip)
    for line in fh:
        yield buffer.popleft()
        buffer.append(line)

在跳过header_skip行并将footer_skip行保留在缓冲区中之后,它会逐个读取行。当我们遍历文件中的所有行时,footer_skip行仍保留在缓冲区中,并且被忽略。你知道吗

这是一个生成函数,所以它将在一个循环中产生行:

with open(filename) as open_file:
    for line in skip_headers_and_footers(open_file, 2, 2):
        # do something with this line.
        line = line.strip()

我将文件打开从函数中移出,这样它也可以用于其他iterables,而不仅仅是文件。你知道吗

现在可以使用csv模块来处理列拆分和剥离:

import csv

with open(filename, 'rb') as open_file:
    reader = csv.reader(open_file, delimiter=';')
    for row in skip_headers_and_footers(reader, 2, 2):
        column = row[1]

而且skip_headers_and_footers()生成器已经为您跳过了前两行,并且永远也不会生成最后两行。你知道吗

相关问题 更多 >