【问题标题】:How save file after processing in python?在python中处理后如何保存文件?
【发布时间】:2018-08-17 16:29:48
【问题描述】:

我是 python 新手。我开始用Beautiful Soup 编写处理HTML 文件的脚本。一切都在正确处理,但我现在想将文章保存在一个名为 nowe 的新文件夹中,而不是打印它。我需要在处理后将所有文章放到同一个文件夹中,或者制作一个 CSV 文件。

from bs4 import BeautifulSoup
import glob
import os, os.path


path = '/home/darek/Dokumenty/pliki/'
path_out = '/home/darek/Dokumenty/pliki/nowe'
for filename in glob.glob(os.path.join(path, '*.html',)):
    f = filename
    tresc = open(f)
    soup = BeautifulSoup(tresc, 'html.parser') 
    article = soup.find('div',class_='post')
    tagi = soup.find('div', class_='ph_social_share_box ph_social_share_box_bottom')

    fout = open( +filename, "w")
    fout.close()

print(article)

我的错误日志:

File "/home/darek/Dokumenty/parser.py", line 21, in <module>
    fout = open( +filename, "w")

TypeError: bad operand type for unary +: 'str'

这适用于打印

从 bs4 导入 BeautifulSoup 导入全局 导入操作系统,os.path

path = '/home/darek/Dokumenty/pliki/'
path_out = '/home/darek/Dokumenty/pliki/nowe'
for filename in glob.glob(os.path.join(path, '*.html',)):
    f = filename
    content = open(f)
    soup = BeautifulSoup(content, 'html.parser') 
    article = soup.find('div',class_='post')
    tags = soup.find('div', class_='ph_social_share_box ph_social_share_box_bottom')


print(article)

这行得通,我无法写入文件创意?

【问题讨论】:

  • filename 是一个字符串。你想用+filename 表达什么? Python 解释器也无法理解。
  • 看来您需要完成有关文件处理的教程。在循环中,您的代码打开 filename 并立即将其关闭,而不对文件执行任何操作。
  • 我会在解析后打开包含 html 文件的文件夹并保存在另一个文件夹中。是我的第一个程序吗?我猜错了。此时,whithour 最后一行 fout 他们将结果打印到屏幕上。如何更改以保存文件。
  • 您正在尝试编写超出您当前能力的几个步骤。同样,请通过适当的教程来提高你的能力。 Stack Overflow 是有用的问答帖子的存档,不是一般帮助网站。
  • 您将处理单个文件与循环逻辑混淆了。教程教您个人技术,您仍然需要加快处理单个文件的速度。一旦你有这么多,你将它包装在一个循环中以按顺序处理许多文件。

标签: python beautifulsoup


【解决方案1】:

删除此行中的“+”: fout = open( +filename, "w")

“w”的意思是:“以写模式打开文件”。 如果你给它加上一个“+”,比如“w+”,它会在文件打开时从头开始写入。所以这条线应该是

fout = open(filename, "w+")

【讨论】:

  • 我对我的文件进行了编辑,但该文件不起作用。同样的错误。
【解决方案2】:

更改此代码块:

fout = open( +filename, "w")
fout.close()

变成这样:

fout = open( filename, "w")
fout.write(article) # I assume here that article is what you want to be writing
fout.close()

tresc.close() # You never closed this, so it was a memory leak

【讨论】:

  • 对不起,我不太明白你想说什么。
猜你喜欢
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
  • 1970-01-01
  • 2019-01-01
相关资源
最近更新 更多