Amgalang 发表于 2021-12-3 08:31:14

字符串中 提取小于5个带有空格的一行数据 求助

我有多行数据,实例如下(每一个词用一个空格隔开,以一个句号结尾):

A& # B B B .
C& # N N MM .
EE # LLLL .

我像提取有&字符的词”#“后空格小于5的一行数据;具体提取的结果是:

A& # B B B .
C& # N N MM .

我目前的代码:

import re
a = open(r"C:\Users\amgalang\Desktop\第二章\词典资源中被标注的研究词条集合 - 副本.txt", encoding="utf-8")
dict = a.readlines()
list1=[]
for i in dict:
       if " " in i.split('#')[-1]:
            i.count(" ")
       if "&" in i.split('#') and i.count(" ")<4 in i.split('#')[-1]:
            print(i)

还是缺点什么,希望帮帮我 补全,谢谢噢。

suchocolate 发表于 2021-12-3 09:36:26

with open(r"C:\Users\amgalang\Desktop\第二章\词典资源中被标注的研究词条集合 - 副本.txt", encoding="utf-8") as f:
    s = f.read()
result = []
for line in s.split('\n'):
    if '&' in line:
      lh, lb = line.split('#')
      if lb.count(' ') < 5:
            result.append(line)
print(result)



import re   # 没有使用到,删除
a = open(r"C:\Users\amgalang\Desktop\第二章\词典资源中被标注的研究词条集合 - 副本.txt", encoding="utf-8")   # 文件没有主动关闭,可使用with打开,让系统关闭
dict = a.readlines()
list1=[]
for i in dict:
       if " " in i.split('#')[-1]:# 没有意义
            i.count(" ")# 计算了数目,但没有赋值给变量,这两行没有意义。而且下一句又计算了一次。
       if "&" in i.split('#') and i.count(" ")<4 in i.split('#')[-1]:# 如果变量已经固定,后续有多次调用,应避免再次index索引
            print(i)

Amgalang 发表于 2021-12-3 09:57:43

suchocolate 发表于 2021-12-3 09:36


学到了,谢谢您的帮助,目前出现了一个问题,我把代码用到另一个文件上 有如下报错,希望您看看 谢谢:
Traceback (most recent call last):
File "C:\Users\amgalang\Desktop\第二章\提取小于5个空格符的数据.py", line 6, in <module>
    lh, lb = line.split('#')
ValueError: not enough values to unpack (expected 2, got 1)

suchocolate 发表于 2021-12-3 10:05:19

Amgalang 发表于 2021-12-3 09:57
学到了,谢谢您的帮助,目前出现了一个问题,我把代码用到另一个文件上 有如下报错,希望您看看 谢谢:
...

txt有没有带#的空行吧,把txt发上来看看。
我这代码假定你的txt是没有垃圾数据的。

Amgalang 发表于 2021-12-3 10:11:16

suchocolate 发表于 2021-12-3 10:05
txt有没有带#的空行吧,把txt发上来看看。
我这代码假定你的txt是没有垃圾数据的。

数据有点大,发不上去,那我找找看 空行 谢谢哒

suchocolate 发表于 2021-12-3 10:13:48

Amgalang 发表于 2021-12-3 10:11
数据有点大,发不上去,那我找找看 空行 谢谢哒

传网盘分享链接

z5560636 发表于 2021-12-3 10:26:11

Amgalang 发表于 2021-12-3 09:57
学到了,谢谢您的帮助,目前出现了一个问题,我把代码用到另一个文件上 有如下报错,希望您看看 谢谢:
...

with open(r"C:\Users\amgalang\Desktop\第二章\词典资源中被标注的研究词条集合 - 副本.txt", encoding="utf-8") as f:
    s = f.read()
result = []

for line in s.split('\n'):
    try:
      if '&' in line:
            lh, lb = line.split('#')
            if lb.count(' ') < 5:
                result.append(line)
    except Exception as e:
      print(e)
      continue
print(result)



加个异常处理机制就好了.

Amgalang 发表于 2021-12-3 10:26:19

suchocolate 发表于 2021-12-3 10:13
传网盘分享链接

好的,我把 指代有“#”符号的筛选出来,在其上 跑了下代码,然后:
Traceback (most recent call last):
File "C:\Users\amgalang\Desktop\第二章\提取小于5个空格符的数据.py", line 6, in <module>
    lh, lb = line.split('#')
ValueError: too many values to unpack (expected 2)

我的文件链接(是小语种的文件):
链接:https://pan.baidu.com/s/1WlWtPNzvS-hgYH5s4B0bcw
提取码:9999

Stubborn 发表于 2021-12-3 10:37:25

本帖最后由 Stubborn 于 2021-12-3 11:01 编辑

至于你后面要提取空格少于5的话,符合条件的都晒选出来了,遍历一次,用分割函数,得到前后两段数据,在用count函数统计后段的空格数量即可


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
txt = open(path).read()
res = re.findall(".*?&.*?#.*?\.", txt)
result = []
for each in res:
    a, b = each.split('#')
    if b.count(" ") < 5:
      result.append(each)




suchocolate 发表于 2021-12-3 11:43:42

Amgalang 发表于 2021-12-3 10:26
好的,我把 指代有“#”符号的筛选出来,在其上 跑了下代码,然后:
Traceback (most recent call last) ...

看了下原始文档,有的行确实没有#,而有的行有多个#。
稍稍改下即可。
with open(r"C:\Users\amgalang\Desktop\第二章\词典资源中被标注的研究词条集合 - 副本.txt", encoding="utf-8") as f:
    s = f.read()
result = []
for line in s.split('\n'):
    if '&' in line and '#' in line:
      lh, lb = line.split('#', 1)
      if lb.count(' ') < 5:
            result.append(line)
print(result)

Amgalang 发表于 2021-12-4 00:09:23

z5560636 发表于 2021-12-3 10:26
加个异常处理机制就好了.

感谢您的帮助,代码学到了,good night~{:10_287:}

Amgalang 发表于 2021-12-4 00:09:53

suchocolate 发表于 2021-12-3 11:43
看了下原始文档,有的行确实没有#,而有的行有多个#。
稍稍改下即可。

好的,谢谢哒{:10_287:}

Amgalang 发表于 2021-12-4 00:11:22

Stubborn 发表于 2021-12-3 10:37
至于你后面要提取空格少于5的话,符合条件的都晒选出来了,遍历一次,用分割函数,得到前后两段数据,在用c ...

感谢您的帮助,正在学习代码,谢谢哒 good night~{:10_287:}
页: [1]
查看完整版本: 字符串中 提取小于5个带有空格的一行数据 求助