使用python删除文本文件中不需要的部分

使用python删除文本文件中不需要的部分,python,python-3.x,Python,Python 3.x,我有一个输入文件,例如 [headline - https://prachatai.com/journal/2020/10/89984] 'ประยุทธ์' ขอบคุณทุกฝ่าย ยืนยันเจ้าหน้าที่ปฏิบัติตามหลักสากลทุกประการ - ด้านตำรวจยืนยันไม่มีการใช้กระสุนยางและแก๊สน้ำตากระชับพื้นที่ผู้ชุมนุม ระบุสารเคมีผสมน้ำไม่มีอันตราย ใช้เพื่อร

我有一个输入文件,例如

[headline - https://prachatai.com/journal/2020/10/89984]
'ประยุทธ์' ขอบคุณทุกฝ่าย ยืนยันเจ้าหน้าที่ปฏิบัติตามหลักสากลทุกประการ - ด้านตำรวจยืนยันไม่มีการใช้กระสุนยางและแก๊สน้ำตากระชับพื้นที่ผู้ชุมนุม ระบุสารเคมีผสมน้ำไม่มีอันตราย ใช้เพื่อระุบตัวผู้ชุมนุมดำเนินคดีในอนาคต
เมื่อคืนวันที่ 16 ต.ค. 2563 อนุชา บูรพชัยศรี โฆษกประจำสำนักนายกรัฐมนตรี เปิดเผยว่า พล.อ. ประยุทธ์ จันทร์โอชา นายกรัฐมนตรี และรัฐมนตรีว่าการกระทรวงกลาโหม ขอขอบคุณเจ้าหน้าที่ทุกฝ่าย ประชาชนทุกกลุ่ม และผู้ชุมนุมที่ให้ความร่วมมือกับทางเจ้าหน้าที่ของรัฐในการยุติการชุมนุม
[headline - https://prachatai.com/english/about/internship]
Here is some english text
[headline - https://prachatai.com/english/node/8813]
Foreigners attended the protest at Thammasat University to show their support for the people of Thailand and their fight for democracy. The use of social media has greatly contributed to the expansion of foreign participation in protests.
A protester with a Guy Fawkes mask at the 19 Sept protest.
[headline - https://prachatai.com/journal/2020/10/89903]
ต.ค.62-ก.ย.63 แรงงานไทยในต่างประเทศส่งเงินกลับบ้าน 200,254 ล้านบาท
นายสุชาติ ชมกลิ่น รัฐมนตรีว่าการกระทรวงแรงงาน เปิดเผยว่า นับจากช่วงที่ประเทศไทยเข้าสู่สถานการณ์การแพร่ระบาดของโรคโควิด-19 ส่งผลกระทบต่อการจัดส่งแรงงานไทยไปทำงานต่างประเทศในภาพรวม เนื่องจากหลายประเทศที่เป็นเป้าหมายในการเดินทางไปทำงานของแรงงานไทย ชะลอการรับคนต่างชาติเข้าประเทศ
我的目标是删除所有英文文章。我有多个大的文本文件,所以我想找到一个有效的方法来摆脱英文文章,并保留所有其他内容

因此,示例输出如下所示

[headline - https://prachatai.com/journal/2020/10/89984]
'ประยุทธ์' ขอบคุณทุกฝ่าย ยืนยันเจ้าหน้าที่ปฏิบัติตามหลักสากลทุกประการ - ด้านตำรวจยืนยันไม่มีการใช้กระสุนยางและแก๊สน้ำตากระชับพื้นที่ผู้ชุมนุม ระบุสารเคมีผสมน้ำไม่มีอันตราย ใช้เพื่อระุบตัวผู้ชุมนุมดำเนินคดีในอนาคต
เมื่อคืนวันที่ 16 ต.ค. 2563 อนุชา บูรพชัยศรี โฆษกประจำสำนักนายกรัฐมนตรี เปิดเผยว่า พล.อ. ประยุทธ์ จันทร์โอชา นายกรัฐมนตรี และรัฐมนตรีว่าการกระทรวงกลาโหม ขอขอบคุณเจ้าหน้าที่ทุกฝ่าย ประชาชนทุกกลุ่ม และผู้ชุมนุมที่ให้ความร่วมมือกับทางเจ้าหน้าที่ของรัฐในการยุติการชุมนุม
[headline - https://prachatai.com/journal/2020/10/89903]
ต.ค.62-ก.ย.63 แรงงานไทยในต่างประเทศส่งเงินกลับบ้าน 200,254 ล้านบาท
นายสุชาติ ชมกลิ่น รัฐมนตรีว่าการกระทรวงแรงงาน เปิดเผยว่า นับจากช่วงที่ประเทศไทยเข้าสู่สถานการณ์การแพร่ระบาดของโรคโควิด-19 ส่งผลกระทบต่อการจัดส่งแรงงานไทยไปทำงานต่างประเทศในภาพรวม เนื่องจากหลายประเทศที่เป็นเป้าหมายในการเดินทางไปทำงานของแรงงานไทย ชะลอการรับคนต่างชาติเข้าประเทศ
如果你能看到,所有的英文文章都在下面

[headline - https://.../english/...
每篇文章都以这些
[headline
标记开始,这些标记是它们的URL。而英文文章的URL中碰巧有
英文

所以现在我想摆脱英语文章。我该如何做到这一点

现行代码

with open('example.txt', 'r') as inputFile:
   data = inputFile.read().splitlines()

Outputtext = ""

for line in data:
    if line.startswith("[headline"):
        if line.contains("english"):
            #somehow read until the next [headline and do check
        else:
            Outputtext = Outputtext + line + "\n"
    else


你可以只使用正则表达式就可以做到这一点。不过,可能需要对它进行调整,以适合你的格式设置的特定规则

import re

all_articles = "..."

# match "[headline...english" and everything after till another "[headline"
english_article_regex = r"\[headline[^\]]*\/english[^\]]*].*?(?=(\[headline|$))"

result = re.sub(english_article_regex, "", all_articles, 0, re.DOTALL)
下面是一个活生生的例子:

您可能只需要正则表达式就可以做到这一点。不过,可能需要对它进行调整,以适合您的格式设置的特定规则

import re

all_articles = "..."

# match "[headline...english" and everything after till another "[headline"
english_article_regex = r"\[headline[^\]]*\/english[^\]]*].*?(?=(\[headline|$))"

result = re.sub(english_article_regex, "", all_articles, 0, re.DOTALL)
下面是一个活生生的例子:

我认为您需要投入额外的时间,您可能已经自己解决了这个问题。当我看到您的代码时,我看到有人正在学习编程,对自己需要做什么感到困惑

你需要一步一步地思考。比如,这里,你有一个由文章组成的文本。你想根据条件过滤掉一些文章。你需要做的第一件事是什么

你首先需要知道如何识别文章。一篇文章在你的文件中是由3行组成的吗?哦,大小改变了,所以你需要另一个共同因素。它们都以
[headline
]开始?好的。现在,我需要创建“组”很多文章。有很多方法可以做到。但我只是想让你了解如何解决问题。一步一个脚印

这里有一个解决你问题的办法,而且它不是唯一的办法

HELLO
IGNORE
THESE
[headline - https://prachatai.com/journal/2020/10/89984]
NOENGLISHTEXT
MULTIPLE
LINES
TEXT
[headline - https://prachatai.com/english/about/internship]
Here is some english text
[headline - https://prachatai.com/english/node/8813]
Foreigners attended the protest at Thammasat University to show their support for the people of Thailand and their fight for democracy. The use of social media has greatly contributed to the expansion of foreign participation in protests.
A protester with a Guy Fawkes mask at the 19 Sept protest.
[headline - https://prachatai.com/journal/2020/10/89903]
NOENGLISHTEXT SECOND
MULTIPLE
LINES
我的解决方案是纯python

def filter\u out\u english\u块(行:列表)->str:
过滤的_行=[]
flag=False
对于行中的行:
如果第.startswith(“[headline”):
如果“英语”不一致:
flag=True
其他:
flag=False
如果标志:
筛选的\u行。追加(行)
返回“”。连接(筛选的\u行)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
以open(“hello.txt”、“r”)作为f:
行=f.读行()
打印(行)
#['HELLO\n'、'IGNORE\n'、'this\n'、'[标题-https://prachatai.com/journal/2020/10/89984]\n','NOENGLISHTEXT\n','MULTIPLE\n','LINES\n','TEXT\n','[标题-https://prachatai.com/english/about/internship]\“这是一些英文文本”\n“,”[标题-https://prachatai.com/english/node/8813]\“外国人参加了Thammasat大学的抗议活动,以表达他们对泰国人民及其民主斗争的支持。社交媒体的使用极大地促进了外国参与抗议活动的扩大。\n”“9月19日抗议活动中戴盖伊·福克斯面具的抗议者。\n”[标题-https://prachatai.com/journal/2020/10/89903]\n','NOENGLISHTEXT秒\n','MULTIPLE\n','LINES']
新建文本=过滤出英语块(行)
打印(新文本)
#[标题-https://prachatai.com/journal/2020/10/89984]
#非英语文本
#多重
#线条
#正文
#[标题-https://prachatai.com/journal/2020/10/89903]
#第二篇英语课文
#多重
#线条
解释是:

  • 我首先决定以列表的形式遍历该文件
  • 我决定仅在我之前看到适合我的条件时存储行(这里,我将看到
    [标题
    行,不包含
    英语
    字符串)
  • 并且我的
    存储条件
    默认设置为False,因此在看到适合我存储的条件之前,第一行将被忽略

我认为您需要投入额外的时间,您可能已经自己解决了这个问题。当我看到您的代码时,我看到有人正在学习编程,对自己需要做什么感到困惑

你需要一步一步地思考。比如,这里,你有一个由文章组成的文本。你想根据条件过滤掉一些文章。你需要做的第一件事是什么

你首先需要知道如何识别文章。一篇文章在你的文件中是由3行组成的吗?哦,大小改变了,所以你需要另一个共同因素。它们都以
[headline
]开始?好的。现在,我需要创建“组”很多文章。有很多方法可以做到。但我只是想让你了解如何解决问题。一步一个脚印

这里有一个解决你问题的办法,而且它不是唯一的办法

HELLO
IGNORE
THESE
[headline - https://prachatai.com/journal/2020/10/89984]
NOENGLISHTEXT
MULTIPLE
LINES
TEXT
[headline - https://prachatai.com/english/about/internship]
Here is some english text
[headline - https://prachatai.com/english/node/8813]
Foreigners attended the protest at Thammasat University to show their support for the people of Thailand and their fight for democracy. The use of social media has greatly contributed to the expansion of foreign participation in protests.
A protester with a Guy Fawkes mask at the 19 Sept protest.
[headline - https://prachatai.com/journal/2020/10/89903]
NOENGLISHTEXT SECOND
MULTIPLE
LINES
我的解决方案是纯python

def filter\u out\u english\u块(行:列表)->str:
过滤的_行=[]
flag=False
对于行中的行:
如果第.startswith(“[headline”):
如果“英语”不一致:
flag=True
其他:
flag=False
如果标志:
筛选的\u行。追加(行)
返回“”。连接(筛选的\u行)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
以open(“hello.txt”、“r”)作为f:
行=f.读行()
打印(行)
#['HELLO\n'、'IGNORE\n'、'this\n'、'[标题-https://prachatai.com/journal/2020/10/89984]\n','NOENGLISHTEXT\n','MULTIPLE\n','LINES\n','TEXT\n','[标题-https://prachatai.com/english/about/internship]\“这是一些英文文本”\n“,”[标题-https://prachatai.com/english/node/8813]\“外国人参加了Thammasat大学的抗议活动,以表达他们对泰国人民及其民主斗争的支持。社交媒体的使用极大地促进了外国参与抗议活动的扩大。\n”“9月19日抗议活动中戴盖伊·福克斯面具的抗议者。\n',”[标题-https://prach