Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python重复文本提取_Python_Xml_Bash_Loops_Text Extraction - Fatal编程技术网

使用Python重复文本提取

使用Python重复文本提取,python,xml,bash,loops,text-extraction,Python,Xml,Bash,Loops,Text Extraction,我有下面的代码,我想用它来提取和之间的文本信息。它工作得很好,但是它只提取了第一个单元,而我想提取这些标记之间的所有文本单元。我试图用bash循环代码来实现这一点,但没有成功 import os directory_path ='C:\\My_folder\\tmp' for files in os.listdir(directory_path): print(files) path_for_files = os.path.join(directory_path,

我有下面的代码,我想用它来提取和之间的文本信息。它工作得很好,但是它只提取了第一个单元,而我想提取这些标记之间的所有文本单元。我试图用bash循环代码来实现这一点,但没有成功

import os

directory_path ='C:\\My_folder\\tmp'

    for files in os.listdir(directory_path):

    print(files)

    path_for_files = os.path.join(directory_path, files)

    text = open(path_for_files, mode='r', encoding='utf-8').read()

    starting_tag = '<font color='
    ending_tag = '</font>'

    ground = text[text.find(starting_tag):text.find(ending_tag)]

    results_dir = 'C:\\My_folder\\tmp'
    results_file = files[:-4] + 'txt'

    path_for_files = os.path.join(results_dir, results_file)

    open(path_for_files, mode='w', encoding='UTF-8').write(result)

您可以使用Beauty Soup的css选择器

>>> from bs4 import BeautifulSoup
>>> s = "foo <font color='#FF0000'> foobar </font> bar"
>>> soup = BeautifulSoup(s, 'lxml')
>>> for i in soup.select('font[color="#FF0000"]'):
    print(i.text)


 foobar 

我想如果你想要不止一个,你应该使用像find_all这样的东西。这里是httml文件吗?如果用一个包含一堆html或xml文件的目录替换它,这会起作用吗?另外,您的脚本所做的是提取“FF0000”,我想提取颜色标记之间的突出显示文本:文本s是html文件的内容。我们必须对目录中的html/xml文件应用for循环。使用os.listdir/tmp/target_html/和文件读取方法。是的,我错过了字体标签的文本。>>root=PARSER.fromstrings>>>用于root.getiteratorfont中的i:。。。试试看。。。如果i.attrib[color]==FF0000:。。。打印i.text。。。除了:。。。谢谢你的回复。我对Python还是相当陌生的。你介意告诉我应该如何将你的建议或@Avinash Raj的建议与我的脚本结合起来吗?你可以使用任何代码,但在对两个测试用例使用代码测试之前有效/无效,或者你可以将示例代码与测试用例剪切,以便我可以查看并为你提供解决方案。vivekbsable@gmail.com/vivek.igp Skype ID导入lxml.html作为解析器def getFontTagTextcontent:Input:html内容。输出:字体标签文本列表列表。font\u text=[]root=PARSER.fromstringcontent for i in root.getiteratorfont:try:if i.attrib[color]==FF0000:font\u text.appendi.text除了:pass return font\u text我想我的问题不清楚,我把你弄糊涂了。我将把它作为我的另一个问题发布。谢谢。谢谢你的建议,但我在使用BeautifulSoup时遇到了麻烦-同样的老问题:ImportTerror:没有名为BeautifulSoup的模块,并且所有建议的解决方案都不适用于我。你需要导入BeautifulSoup。如果尚未安装,请安装。是的,我知道。我确实安装了它,但不知何故无法导入它。我读了不同的建议,但没有一个对我有用。我现在在想,问题可能是我的计算机上安装了三个Python版本。我从来没有在其他软件包上遇到过这样的问题。嗯,我设法在Cygwin上运行BeautifulSoup,但我遇到了一个错误:AttributeError:“str”对象没有属性“text”,我正在使用BeautifulSoup-3.2.1-唯一一个在我的机器上运行的。
You can also use lxml.html 

>>> import lxml.html as PARSER
>>> s = "<html><body>foo <font color='#FF0000'> foobar </font> bar</body></html>"
>>> root = PARSER.fromstring(s)
>>> for i in root.getiterator("font"):
...   try: i.attrib["color"]
...   except:pass