读取文件:一个函数可以工作,但两个都不行

2024-09-28 18:48:46 发布

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

这是我的密码:

import re


def get_email_answers(path):
    for line in path:
        clear = line.strip()
        if re.match(r".*\s.*\t(Antw.+)\t.*Uhr", clear):
            subject = re.findall(r".*\s.*\t(Antw.+)\t.*Uhr", clear)
            print(subject)


def get_sizes(path):
    for line in path:
        clear = line.strip()
        if re.match(r".*\s([0-9][0-9]\s[MKG]B)", clear):
            size = re.findall(r".*([0-9][0-9]\s[MKG]B)", clear)
            print(size)
        elif re.match(r".*\s([0-9][0-9][0-9]\s[MKG]B)", clear):
            size = re.findall(r".*([0-9][0-9][0-9]\s[MKG]B)", clear)
            print(size)
        elif re.match(r".*\s([0-9]\s[MKG]B)", clear):
            size = re.findall(r".*([0-9]\s[MKG]B)", clear)
            print(size)
        elif re.match(r".*(.\.[0-9][0-9]\s[MKG]B)", clear):
            size = re.findall(r".*(.\.[0-9][0-9]\s[MKG]B)", clear)
            print(size)


file_opener = open(r"C:\Users\julia\Documents\RegEX-Test.txt", "r")
get_sizes(file_opener)
get_email_answers(file_opener)

函数get\u size起作用,但函数get\u email\u answers不起作用。 如果您将函数get_size注释掉,那么get_email_answers就可以完美地工作。如果您将获取电子邮件\u答案放在获取大小之前,则获取大小不起作用,而获取电子邮件\u答案起作用

我已经这样做了:

def get_email_answers(path):
    print(path) #modified here
    for line in path:
        print("line") #and here
        clear = line.strip()
        if re.match(r".*\s.*\t(Antw.+)\t.*Uhr", clear):
            subject = re.findall(r".*\s.*\t(Antw.+)\t.*Uhr", clear)
            print(subject)

打印路径与在获取大小中相同。 但是,for循环没有运行! 为什么?当你评论另一个函数时,为什么会这样呢


Tags: pathreforsizegetemailmatchline
2条回答

只能读取一次文件对象。我必须将文件数据存储在一个变量中:data = file_opener.read()并对其进行迭代,否则需要在函数末尾返回文件指针

试试这个:

get_sizes(file_opener)
file_opener.seek(0)
get_email_answers(file_opener)

澄清一下:问题不在于函数,而在于处理输入文件的方式

读取文件是一个连续的过程。当你打开一个文件时,会创建一个内部“指针”,记住你在文件中的位置——首先它指向文件的开头,每次你读取一个文件块时,“指针”都会经过这个文件块并指向尚未读取的第一个字节。因此,在您的一个函数读取文件后,该指针被设置为文件的末尾,当第二个函数尝试读取该文件时,它看起来是空的。您需要调用file_opener.seek(0),在读取之间重置此指针

顺便说一句,file_opener是一个稍微容易混淆的名称-此变量保存文件对象本身,而不是提供打开文件功能的某些对象

相关问题 更多 >