在python中读取大文本时遇到错误

时间:2017-07-12 20:32:10

标签: python

使用Python3我的要求是从目录中读取电子邮件文件并过滤其中的Html标记。

我已经设法在很大程度上做到了。当我尝试读取输出的内容时,它会出错

for line in output.splitlines():
AttributeError: 'int' object has no attribute 'splitlines'  
for file in glob.glob('spam/*.*'):
    output = os.system("python html2txt.py " + file)
    for line in output.splitlines():
     print(line)  

当我打印输出时,它会显示一个已过滤的文本。非常感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

请尝试将其替换为您提供的代码:

import glob

files = glob.glob('spam/*.*')

for f in files:
    with open(f) as spam_file:
        for line in spam_file:
            print(line)

如果文件确实是html文件,我建议您查看BeautifulSoup

答案 1 :(得分:0)

os.system(command)的返回值是系统相关的,它假设返回由int表示的(编码的)进程退出值。阅读更多here

  

在Unix上,返回值是编码进程的退出状态   为wait()指定的格式。请注意,POSIX未指定   C system()函数的返回值的含义,所以返回   Python函数的值取决于系统。

     

在Windows上,返回值是系统shell返回的值   运行命令后,由Windows环境变量给出   COMSPEC:在command.com系统(Windows 95,98和ME)上始终如此   0;在cmd.exe系统(Windows NT,2000和XP)上,这是退出   命令运行的状态;在使用非本机shell的系统上,   请参阅您的shell文档。

但是在没有系统的情况下,它返回str,方法splitlines()是str方法。阅读更多here

您在str上调用了int方法,这就是您收到错误的原因:

  

AttributeError:'int'对象没有属性'splitlines'

答案 2 :(得分:0)

  

在Unix上,返回值是编码进程的退出状态   为wait()指定的格式。请注意,POSIX未指定   C system()函数的返回值的含义,所以返回   Python函数的值取决于系统。

     

在Windows上,返回值是系统shell返回的值   运行命令后。 shell由Windows环境提供   变量COMSPEC:它通常是cmd.exe,它返回退出状态   命令运行;在使用非本机shell的系统上,请咨询您的   shell文档。   python docs

因此,您的output变量是一个整数,而不是由该文件解析的文件的结果 html2txt.py脚本。

为什么你在当前进程之外运行另一个python脚本?难道你不能从该模块导入正在执行该任务的任何类函数吗?

还有email module可以帮助您